主要问题是用朴素(暴力DP)的方法便会:TLE+MLE+RE!
作为刚学DP的萌新,自然不会 QAQ
本蒟蒻能力有限,最多打这么多了:
#include<bits/stdc++.h>
using namespace std;
int f[105][105][105][105];
int l,n,c[2005][2005],p[200005];
int mymin=9999999;
int main(){
int T;
cin>>T;
for(int ii=1;ii<=T;ii++){
cin>>l>>n;
for(int i=1;i<=l;i++){
for(int j=1;j<=l;j++){
cin>>c[i][j];
}
}
for(int i=1;i<=n;i++){
cin>>p[i];
}
//输入
for(int i=1;i<=n;i++){
for(int j=1;j<=l;j++){
for(int k=1;k<=l;k++){
for(int x=1;x<=l;x++){
f[i+1][p[i+1]][k][x]=min(f[i+1][p[i+1]][k][x],f[i][j][k][x]+c[j][p[i]]);
f[i+1][j][p[i+1]][x]=min(f[i+1][j][p[i+1]][x],f[i][j][k][x]+c[k][p[i]]);
f[i+1][i][k][p[i+1]]=min(f[i+1][j][k][p[i+1]],f[i][j][k][x]+c[x][p[i]]);
}
}
}
}
//dp拓展
for(int j=1;j<=l;j++){
for(int k=1;k<=l;k++){
for(int x=1;x<=l;x++){
mymin=min(mymin,f[n][j][k][x]);
}
}
}
//目标解
cout<<mymin;
}
return 0;
}
感觉我直接拉低了洛谷平均智商啊,QAQ