60求助!

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

operator_ @ 2021-10-11 18:42:47

Rt,#3#7#8#9错了,样例对的,下载个数据调不出来,求救

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,v1,p1,q1,v[100][5],w[100][5],l[100],k,dp[40000];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>v1>>p1>>q1;
        if(q1==0) 
        {
            v[++k][0]=v1*p1;
            w[k][0]=v1;
        }
        else 
        {
            v[q1][++l[q1]]=v1*p1;
            w[q1][l[q1]]=v1;
        }
    }
    for(int i=1;i<=k;i++)
    for(int j=n;j>=w[i][0];j--)
    {
        if(j>=w[i][0]) dp[j]=max(dp[j],dp[j-w[i][0]]+v[i][0]);
        if(l[i]>=1&&j>=w[i][0]+w[i][1]) dp[j]=max(dp[j],dp[j-w[i][0]-w[i][1]]+v[i][0]+v[i][1]);
        if(l[i]>=2&&j>=w[i][0]+w[i][2]) dp[j]=max(dp[j],dp[j-w[i][0]-w[i][2]]+v[i][0]+v[i][2]);
        if(l[i]>=2&&j>=w[i][0]+w[i][1]+w[i][2]) dp[j]=max(dp[j],dp[j-w[i][0]-w[i][1]-w[i][2]]+v[i][0]+v[i][1]+v[i][2]);
    }
    cout<<dp[n];
    return 0;
}

by operator_ @ 2021-10-11 18:44:24

似乎是v,w打反了的感觉,dalao们将就看看吧


by 芝麻馅儿汤圆 @ 2021-12-01 22:45:59

@gyh13372544403 附件和主件都是要计算序号的,我和你一样也被卡了,比如

1000 5
800 2 0
400 5 1
300 5 1
400 3 0
500 2 0

这个,第五行是四号,不是二号,输入处理那边附件部分也加个“++”就行


by operator_ @ 2021-12-02 17:48:35

@芝麻馅儿汤圆 感谢感谢,过了


|