至于为什么,因为我用下面的仅适用单向路径的代码测试过了
要么就是缺条件,要么就是数据太水
#include <iostream>
#include <cstring>
using namespace std;
int w[210],n;
int e[200000],ne[200000],h[210],tot=1; //数组模拟邻接表储存边
//e表示指向,ne为下一条,h为首条
int f[210],nexts[210];
int maxf=0,maxwh=0;
void add(int a,int b){
e[tot]=b; ne[tot]=h[a]; h[a]=tot++;
}
int main(){
memset(h,0,sizeof(h));
cin >> n;
for(int i=1;i<=n;i++) cin >> w[i];
//for(int i=1;i<=n;i++) cout << w[i] << " ";
//cout << endl;
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
int a;
cin >> a;
if(a==1){
//cout << i << " " << j << endl;
add(i,j);
//add(j,i);
}
}
}
for(int i=n;i>0;i--){
f[i]=w[i];
int maxs=0,nex=0;
for(int s=h[i];s!=0;s=ne[s]){
if(f[e[s]] > maxs){
maxs=f[e[s]];
nex=e[s];
}
}
nexts[i]=nex;
f[i]+=maxs;
if(f[i]>maxf){
maxf=f[i];
maxwh=i;
}
}
for(int i=maxwh;i>0;i=nexts[i]){
cout << i;
if(nexts[i]>0) cout << " ";
}
cout << endl<<maxf;
return 0;
}
而且根据当年的原题??也是说路径是单向的啊!