RT,自个捏了几个数据全是对的,但全MLE,求大神帮忙优化
#include<iostream>
#include<algorithm>
#include<queue>
#include<set>
#include<cmath>
#include<memory.h>
#include<map>
#include<stack>
#define INF 0x3f
using namespace std;
int n,u,v;
int ga[21][21];
int dp[21][1<<21];
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>ga[i][j];
}
}
memset(dp,INF,sizeof(dp));
dp[1][1]=0;
for(int k=1;k<=(1<<n)-1;k++){//所有格局
for(int i=1;i<=n;i++){
if(k>>(i-1)&1==false){
continue;
}
for(int j=1;j<=n;j++){
if(i==j){
continue;
}
if(k>>(j-1)&1){
continue;
}
dp[j][k|(1<<(j-1))]=min(dp[j][k|(1<<(j-1))],dp[i][k]+ga[i][j]);
}
}
}
int ans=INF;
for(int i=2;i<=n;i++){
ans=min(ans,dp[i][(1<<n)-1]+ga[i][1]);
}
cout<<ans<<endl;
return 0;
}