LOJ #2318「NOIP2017」宝藏【状态压缩】【傻逼题】

一道傻逼题????

我看到很多题解各种求什么 dis[s1][s2] d i s [ s 1 ] [ s 2 ] 距离,明明写一个搜索就可以过了啊,还跑得飞快。

我们枚举一下出发点,然后枚举当前状态没有到达的点进行转移就好了啊,

f[s|(1<<j)]={f[s]+dis[i][j]deep[i]} f [ s | ( 1 << j ) ] = { f [ s ] + d i s [ i ] [ j ] ∗ d e e p [ i ] }

其中 dis[i][j] d i s [ i ] [ j ] 表示 i i j j 的距离, deep[i] d e e p [ i ] 表示搜索树的层数

void Dfs(LL S) {
    for(LL I=0;Iif(S&(1<for(LL J=0;Jif(!(S&(1<if(DP[S|(1<DP[S]+Map[I][J]*Deep[I]) {
        DP[S|(1<*Deep[I];Deep[J]=Deep[I]+1;Dfs(S|(1<int main() {
    scanf("%lld%lld",&N,&M);T=(1<1;
    for(LL I=0;I<=N;I++) {
        for(LL J=0;J<=N;J++) {
            Map[I][J]=Inf;
        }
    }
    for(LL I=1;I<=M;I++) {
        LL X,Y,Z;
        scanf("%lld%lld%lld",&X,&Y,&Z);X--,Y--;
        Map[X][Y]=Map[Y][X]=min(Map[X][Y],Z);
    }

    for(LL I=0;Ifor(LL J=0;J<=T;J++) DP[J]=Inf;

        Deep[I]=1;DP[1<0;Dfs(1<printf("%lld",Ans);

    return 0;   
}

你可能感兴趣的:(LOJ,动态规划与递推,动态规划-状态压缩,NOIP及模拟)