求救!!!90分

P1064 [NOIP2006 提高组] 金明的预算方案

唔啊唔 @ 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个点


|