POJ 3311

来源:互联网 发布:百度搜索关键词优化 编辑:程序博客网 时间:2024/06/08 03:24
#include<string.h>#include<cstdio>#include<cstdlib>#include<vector>#include<iostream>#include<algorithm>#define INF 1<<20using namespace std;int dis[12][12];int dp[1<<11][12];int n,ans,minx;int main(){while(scanf("%d",&n)&&n){for(int i=0;i<=n;i++)for(int j=0;j<=n;j++)scanf("%d",&dis[i][j]);for(int k=0;k<=n;k++)for(int i=0;i<=n;i++)for(int j=0;j<=n;j++)if(dis[i][k]+dis[k][j]<dis[i][j])dis[i][j]=dis[i][k]+dis[k][j];for(int State=0;State<=(1<<n)-1;++State)for(int i=1;i<=n;++i){if(State&(1<<(i-1))){if(State==(1<<(i-1)))dp[State][i]=dis[0][i];else{dp[State][i]=INF;for(int j=1;j<=n;j++)if(State&(1<<(j-1))&&j!=i)dp[State][i]=min(dp[State^(1<<(i-1))][j]+dis[j][i],dp[State][i]);}}}ans=dp[(1<<n)-1][1]+dis[1][0];for(int i=2;i<=n;i++)if(dp[(1<<n)-1][i]+dis[i][0]<ans){ans=dp[(1<<n)-1][i]+dis[i][0];}printf("%d\n",ans);}return 0;}

原创粉丝点击