20分求助QAQ

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

mazihang2022 @ 2020-02-19 21:28:06

码风不好请见谅

#include <bits/stdc++.h>
using namespace std;
int maxn;
int a[650],b[650],c[650],dp[320005],dpa[650][50],flag[650],dpb[650][50],sum[650],dpd[650][50];
int main()
{
    int n,m;
    cin>>m>>n;
//  memset(dp,1,sizeof(dp));
    for(int i=1; i<=n; i++)
    {
        cin>>a[i]>>b[i]>>c[i];
        flag[c[i]]++;
    }
    for(int i=1; i<=n; i++)
    {
        sum[i]=1;
        dpa[i][1]=dpa[i][2]=dpa[i][3]=dpa[i][4]=a[i];
        dpd[i][1]=dpd[i][2]=dpd[i][3]=dpd[i][4]=a[i]*b[i];
        if(flag[i])
        {
            if(flag[i]==1)
            {
                sum[i]=2;
                for(int j=1; j<=n; j++)
                {
                    if(c[j]==i)
                    {
                        dpa[i][2]+=a[j];
                        dpd[i][2]+=a[j]*b[j];
                        break;
                    }
                }
            }
            else
            {
                sum[i]=4;
                int aa=-1,bb=-1;
                for(int j=1; j<=n; j++)
                {
                    if(c[j]==i)
                    {
                        if(aa==-1)aa=j;
                        else bb=j;
                    }
                }
                dpa[i][2]+=a[aa];
                dpd[i][2]+=a[aa]*b[aa];
                dpa[i][3]+=a[bb];
                dpd[i][3]+=a[bb]*b[bb];
                dpa[i][4]+=a[aa]+a[bb];
                dpd[i][4]+=a[aa]*b[aa]+a[bb]*b[bb];
            }
        }
    }
    for(int i=1; i<=n; i++)
    {
        if(c[i]==0)
            for(int k=1; k<=sum[i]; k++)
            {
                for(int j=m; j>=dpa[i][k]; j--)
                {
                    dp[j]=max(dp[j-dpa[i][k]]+dpd[i][k],dp[j]);
                }
            }
    }
    cout<<dp[m];
}

by System_Tish @ 2020-02-20 15:39:14

@mazihang2022 dalao,您把dp时候的k,j位置换一下 像这样

for(int j=m; j>=1; j--) {
for(int k=1; k<=4; k++) {
if(j>=dpa[i][k]) 
dp[j]=max(dp[j-dpa[i][k]]+dpd[i][k],dp[j]);
}

by mazihang2022 @ 2020-02-20 19:20:48

谢谢大佬QAQ


|