状态压缩,WA在n=1时 ,感谢田腿避免我晚上打cf心神不宁...
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 16
#define INF 1000000000
#define LL long long
int n;
int a[N][N];
int dp[1<<N][N];
int main() {
while(scanf("%d", &n) != EOF){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
scanf("%d", &a[i][j]);
}
}
for(int i = 0; i < (1 << n); i++){
for(int j = 0; j < n; j++){
dp[i][j] = INF;
}
}
int mv = INF;
dp[1][0] = 0;
for(int i = 1; i < (1 << n); i++){
if(i & 1 == 0)continue;
for(int j = 0; j < n; j++){
if(i & (1 << j) == 0)continue;
for(int k = 1; k < n; k++){
if((1 << k) & i)continue;
dp[i | (1 << k)][k] = min(dp[i | (1 << k)][k], dp[i][j] - a[j][0] + a[j][k] + a[k][0]);
}
}
}
for(int i = 1; i < n; i++){
if(dp[(1<<n)-1][i] < mv) mv = dp[(1<<n)-1][i];
}
if(n == 1)printf("0\n");
else printf("%d\n", mv);
}
return 0;
}