主要就是这一部分代码
TE 但是没有找到可以优化的地方
感觉理论上没有问题,实践上出现了问题
void solveDP(){
ans=0;
id.clear();
for(ll i=1;i<=n;i++){
string s;
cin>>s;
id[s]=i;
}
for(ll i=1;i<=m;i++){
cin>>s_1[i]>>s_2[i]>>s_3[i];
}
for(ll i=1;i<(1<<m);i++){
for(ll j=1;j<=m;j++){
f[i][j]=0;
if(((i>>(j-1))&1)==0) continue;
ll lst=i-(1<<(j-1));
// cout<<i<<" "<<j<<" "<<lst<<"\n";
for(ll k=1;k<=m;k++){
if(((lst>>(k-1))&1)==0) continue;
if(f[i][j]>f[lst][k]+chkadd(k,j)) continue;
f[i][j]=max(f[i][j],f[lst][k]+chkadd(k,j));
llst[i][j]=k;
}
// cout<<i<<" "<<j<<"="<<llst[i][j]<<"\t";
}
// cout<<"\n";
}
ll mx=0;
for(ll i=1;i<=m;i++){
if(ans>f[(1<<m)-1][i]) continue;
ans=max(ans,f[(1<<m)-1][i]);
mx=i;
}
cout<<ans<<"\n";
ll x=(1<<m)-1,nw=mx; nT=0;
for(ll i=1;i<=m;i++){
// cout<<mx<<"\n";
stk[++nT]=mx;
mx=llst[x][mx];
x-=(1<<(nw-1));
nw=mx;
}
for(ll i=nT;i>=1;i--) cout<<stk[i]<<" "; cout<<"\n";
}