ch_5102 Mobile Service

时间:2019-11-05
本文章向大家介绍ch_5102 Mobile Service,主要包括ch_5102 Mobile Service使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

这题太tm毒瘤了

边界一大堆

优化:优化状态,减少一维

题解:https://www.luogu.org/blog/Tony102/solution-sp703

#include<iostream>
#include<cstdio>

#define ri register int
#define u int

namespace opt {

    inline u in() {
        u x(0),f(1);
        char s(getchar());
        while(s<'0'||s>'9') {
            if(s=='-') f=-1;
            s=getchar();
        }
        while(s>='0'&&s<='9') {
            x=(x<<1)+(x<<3)+s-'0';
            s=getchar();
        }
        return x*f;
    }

}

using opt::in;

#include<cstring>

#define NN 1005
#define MM 1005

namespace mainstay {

    u N,M,c[NN][NN],a[NN],f[2][205][205];

    inline void solve() {
        N=in(),M=in();
        for(ri i(1); i<=N; ++i) {
            for(ri j(1); j<=N; ++j) {
                c[i][j]=in();
            }
        }
        for(ri i(1); i<=M; ++i) a[i]=in();
        memset(f,0x3f,sizeof(f));
        f[0][1][2]=0,a[0]=3;
        for(ri x(1); x<=M; ++x) {
            u i(x&1);
            std::memset(f[i],0x3f,sizeof(f[i]));
            for(ri j(1); j<=N; ++j) {
                if(j!=a[x-1])
                for(ri k(1); k<=N; ++k) {
                    if(k!=j&&k!=a[x-1]) {
                        if(j!=a[x]&&k!=a[x]) f[i][j][k]=std::min(f[i^1][j][k]+c[a[x-1]][a[x]],f[i][j][k]);
                        if(k!=a[x]&&a[x]!=a[x-1]) f[i][a[x-1]][k]=std::min(f[i^1][j][k]+c[j][a[x]],f[i][a[x-1]][k]);
                        if(j!=a[x]&&a[x]!=a[x-1]) f[i][j][a[x-1]]=std::min(f[i^1][j][k]+c[k][a[x]],f[i][j][a[x-1]]);
                    }
                }
            }
            u _y(0);
        }
        u ans(0x7fffffff);
        for(ri i(1); i<=N; ++i)
            for(ri j(1); j<=N; ++j) 
                if(i^j&&i^a[M]&&j^a[M]) 
                    ans=std::min(ans,f[(M&1)][i][j]);
        std::cout<<ans;
    }

}

int main() {

    //freopen("x.txt","r",stdin);
    std::ios::sync_with_stdio(false);
    mainstay::solve();

}

原文地址:https://www.cnblogs.com/ling-zhi/p/11801735.html