唔啊唔 @ 2019-07-26 13:00:38
第4个点WA了
#include<bits/stdc++.h>
using namespace std;
int m,n,num,bj[1000];
int v[1000],fat[1000],imp[1000],hzy[1000][10],f[100][40000];
int main(){
scanf("%d%d",&m,&n);
for(register int i=1;i<=n;i++){
scanf("%d%d%d",&v[i],&imp[i],&fat[i]);
if(fat[i]==0){
num++;
bj[i]=num;
hzy[num][0]=i;
}
else{
int father=bj[fat[i]];
if(hzy[father][1]==0) hzy[father][1]=i;
else hzy[father][2]=i;
}
}
// for(register int i=1;i<=num;i++){
// cout<<hzy[i][0]<<" "<<hzy[i][1]<<" "<<hzy[i][2]<<endl;
// }
for(register int i=1;i<=num;i++){
for(register int j=v[i];j<=m;j++){
f[i][j]=max(f[i-1][j],f[i-1][j-v[hzy[i][0]]]+v[hzy[i][0]]*imp[hzy[i][0]]);
if(hzy[i][1]!=0){
if(j-v[hzy[i][0]]-v[hzy[i][1]]>=0)f[i][j]=max(f[i][j],f[i-1][j-v[hzy[i][0]]-v[hzy[i][1]]]+v[hzy[i][0]]*imp[hzy[i][0]]+v[hzy[i][1]]*imp[hzy[i][1]]);
}
if(hzy[i][2]!=0){
if(j-v[hzy[i][0]]-v[hzy[i][2]]>=0)f[i][j]=max(f[i][j],f[i-1][j-v[hzy[i][0]]-v[hzy[i][2]]]+v[hzy[i][0]]*imp[hzy[i][0]]+v[hzy[i][2]]*imp[hzy[i][2]]);
if(j-v[hzy[i][0]]-v[hzy[i][2]]-v[hzy[i][1]]>=0)f[i][j]=max(f[i][j],f[i-1][j-v[hzy[i][0]]-v[hzy[i][2]]-v[hzy[i][1]]]+v[hzy[i][0]]*imp[hzy[i][0]]+v[hzy[i][2]]*imp[hzy[i][2]]+v[hzy[i][1]]*imp[hzy[i][1]]);
}
}
}
cout<<f[num][m];
return 0;
}
by dangqishuangjiang @ 2019-08-08 08:26:07
%%%%
by lzqy_ @ 2020-02-29 19:36:35
同样90分啊啊
by lzqy_ @ 2020-02-29 19:36:47
也是第4个点