zoukankan      html  css  js  c++  java
  • POJ 3311 Hie with the Pie 先用floyd预处理,再状态压缩

    下面是别人的解题报告链接:

    http://blog.csdn.net/accry/article/details/6607703

    下面是我的代码,我觉得链接中的代码有一点小问题,也许是我想错了吧。

     1 #include <cstdio>
     2 #define min(a,b) (a) < (b) ? (a) : (b);
     3 #define INF 100000000
     4 int dist[13][13];
     5 int dp[2050][13];
     6 void init(int n)
     7 {
     8     for(int i=0; i<=n; ++i)
     9         for(int j=0; j<=n; ++j)
    10             scanf("%d",&dist[i][j]);
    11     for(int k =0; k <=n; ++k)
    12         for(int i=0; i<=n; ++i)
    13             for(int j=0; j<=n; ++j)
    14                 dist[i][j] = min(dist[i][j],dist[i][k]+dist[k][j]);
    15 }
    16 int main()
    17 {
    18 //    freopen("in.cpp","r",stdin);
    19     int n;
    20     while(scanf("%d",&n), n)
    21     {
    22         init(n);
    23         int sn = 1<<(n+1);//状态数
    24         for(int i=0; i<sn; ++i)
    25             for(int j=0; j<=n; ++j)
    26                 dp[i][j] = INF;
    27         for(int i=0; i<=n; ++i)
    28             dp[(1<<i)][i] = dist[0][i];
    29         for(int k=1; k<sn; ++k)
    30         {
    31             for(int i=0; i<=n; ++i)
    32             {
    33                 if(! (k & (1<<i) )) continue;
    34                 for(int j=0; j<=n; ++j)
    35                 {
    36                     if( j != i &&  k & (1 << j) )
    37                         dp[k][i] = min(dp[k][i] , dp[k^(1<<i)][j]+dist[j][i] );
    38                 }
    39             }
    40         }
    41         printf("%d
    ",dp[sn-1][0]);
    42     }
    43     return 0;
    44 }
    View Code
  • 相关阅读:
    bzoj 3924
    bzoj 1095
    luogu 4886
    bzoj 2152
    CF960G
    bzoj 3561
    bzoj 4176
    bzoj 4407
    bzoj 3309
    luogu 4608
  • 原文地址:https://www.cnblogs.com/allh123/p/3232613.html
Copyright © 2011-2022 走看看