dp[S]表示已经完成的工作集合
枚举从哪儿转移过来的,再通过枚举计算花费。。水水的。。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF (1<<30)
int d[<<];
int main(){
int t,n,a[][];
scanf("%d",&t);
for(int cse=; cse<=t; ++cse){
scanf("%d",&n);
for(int i=; i<n; ++i){
for(int j=; j<n; ++j) scanf("%d",&a[i][j]);
}
for(int i=; i<(<<n); ++i) d[i]=INF;
for(int i=; i<(<<n); ++i){
for(int j=; j<n; ++j){
if(((i>>j)&)==) continue;
int tmp=d[i^(<<j)]+a[j][j];
for(int k=; k<n; ++k){
if(k==j || ((i>>k)&)==) continue;
tmp+=a[j][k];
}
d[i]=min(d[i],tmp);
}
}
printf("Case %d: %d\n",cse,d[(<<n)-]);
}
return ;
}