Submit Time:2023-04-14 21:07:33

运行 ID: 74752

#include<iostream> #include<cstring> using namespace std; int main() { long f[201]={0},w[201],c[201]={0}; bool a[201][201]={0}; long i,j,n,x,y,l,k,maxx; memset(f,0,sizeof(f)); memset(c,0,sizeof(c)); memset(a,0,sizeof(a));//将f,c,a三个全部初始化为0; cin>>n; for(i=1;i<=n;i++) cin>>w[i];//输入每个金矿中的金子数 for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) cin>>a[i][j];//输入路径数 f[n]=w[n];//从后面的f[n]往前逐个找出所有的f[i] for(i=n-1;i>=1;i--) { l=0;k=0; for(j=i+1;j<=n;j++) if((a[i][j])&&(f[j]>l)) { l=f[j]; k=j; } f[i]=l+w[i];//保存从第i个金矿起能挖到的后继点最大金子数 c[i]=k;//k金矿是i金矿最优路径 } k=1; for(j=2;j<=n;j++)//计算最多挖出的金子数 if(f[j]>f[k]) k=j; maxx=f[k]; cout<<maxx<<endl;//输出最多挖出的金子数 }