以下是30分代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=22;
const int INF=1e18;
int dis[N][N];
int f[N][1<<N];
signed main(){
int n,m;
cin>>n>>m;
for(int i=0;i<=n;i++){
for(int j=0;j<(1<<(n+1));j++){
f[i][j]=-INF;
}
}
for(int i=0;i<=n;i++){
for(int j=0;j<=n;j++){
dis[i][j]=-INF;
}
}
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
dis[u][v]=max(w,dis[u][v]);
}
f[0][1]=0;
for(int i=1;i<n;i++){
f[i][(1<<i)]=dis[0][i];
}
for(int k=1;k<(1<<n);k++){
for(int i=0;i<n;i++){
if(!((k>>i)&1)){
continue;
}
for(int j=0;j<n;j++){
if(i==j){
continue;
}
if(!((k>>j)&1)){
continue;
}
f[i][k]=max(f[i][k],f[j][k^(1<<i)]+dis[j][i]);
}
}
}
int ans=-INF;
for(int k=1;k<(1<<n);k++){
ans=max(ans,f[n-1][k]);
}
cout<<ans;
return 0;
}
为什么把其中的初始化代码删除就能ac (初始化代码)
for(int i=1;i<n;i++){
f[i][(1<<i)]=dis[0][i];
}