标签:lan ext limit ring get row otto self ott
水状压DP
1 3 2 1 2 2 1 3 3
10
/* *********************************************** Author :CKboss Created Time :2015年08月23日 星期日 10时27分21秒 File Name :HDOJ5418.cpp ************************************************ */ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include <cmath> #include <cstdlib> #include <vector> #include <queue> #include <set> #include <map> #include <cassert> using namespace std; typedef long long int LL; const int INF=0x3f3f3f3f; int n,m; int G[18][18]; int dp[18][1<<18]; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int T_T; scanf("%d",&T_T); while(T_T--) { scanf("%d%d",&n,&m); memset(G,63,sizeof(G)); for(int i=0;i<n;i++) G[i][i]=0; for(int i=0,a,b,c;i<m;i++) { scanf("%d%d%d",&a,&b,&c); a--; b--; G[a][b]=min(G[a][b],c); G[b][a]=min(G[b][a],c); } for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) G[i][j]=min(G[i][j],G[i][k]+G[k][j]); memset(dp,63,sizeof(dp)); dp[0][1]=0; for(int i=1;i<(1<<n);i++) /// status { for(int j=0;j<n;j++) /// from point { if(((1<<j)&i)!=0) { for(int k=0;k<n;k++) /// to point { if(((1<<k)&i)==0) { dp[k][((1<<k)|i)]=min(dp[k][((1<<k)|i)],dp[j][i]+G[j][k]); } } } } } int ans=INF; for(int i=0;i<n;i++) { ans=min(ans,dp[i][(1<<n)-1]+G[i][0]); } if(n==1) ans=0; printf("%d\n",ans); } return 0; }
HDOJ 5418 Victor and World 状压DP
标签:lan ext limit ring get row otto self ott
原文地址:http://www.cnblogs.com/claireyuancy/p/7265374.html