0分求调

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

chenrang @ 2024-07-05 11:16:27

#include<iostream>
using namespace std;
const int maxv=32007,maxn=10086;
int dp[maxv],c[maxn],w[maxn],fj[maxn],yid[maxn];
int v,m,k;
struct node
{
    int id;
    int id1,id2;
} a[65];
int main()
{
    int p=0,id,id1,id2;
    cin>>v>>m;
    for(int i=1;i<=m;i++) cin>>c[i]>>w[i]>>fj[i],w[i]*=c[i];
    for(int i=1;i<=m;i++) if(fj[i]==0) a[++k].id=i,yid[i]=k;
    for(int i=1;i<=m;i++)
    {
        if(fj[i]!=0)
        {
            p=yid[fj[i]];
            if(a[p].id1==0) a[p].id1=i;
            else a[p].id2=i;
        }
    }
    for(int i=1;i<=k;i++)
    {
        id=a[i].id; id1=a[i].id1; id2=a[i].id2;
        for(int j=v;j>=c[id];j--)
        {
            dp[j]=max(dp[j],dp[j-c[id]+w[id]]);
            if(j>=c[id]+c[id1]) dp[j]=max(dp[j],dp[j-c[id]-c[id1]]+w[id]+w[id1]);
            if(j>=c[id]+c[id2]) dp[j]=max(dp[j],dp[j-c[id]-c[id2]]+w[id]+w[id2]);
            if(j>=c[id]+c[id1]+c[id2]) dp[j]=max(dp[j],dp[j-c[id]-c[id1]-c[id2]]+w[id]+w[id1]+w[id2]);
        }
    }
    cout<<dp[v];
    return 0;
}

subtask 1过了

其他九个WA一个RE

记录


|