求助!!!

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

李湛然 @ 2020-02-13 18:46:35

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[100+5],v[100+5],q[100+5];
int f[32005]; 
int g[100+5][3]; 
int gv[100+5][3];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>a[i]>>v[i]>>q[i];
        if(q[i]!=0)
        {
            if(g[q[i]][1]==0)
            {
                g[q[i]][1]=a[i];
                gv[q[i]][1]=v[i];
            }
            else if(g[q[i]][2]==0)
            {
                g[q[i]][2]=a[i];
                gv[q[i]][2]=v[i];
            }
        }
    }
    for(int i=1;i<=m;i++)
    {
        for(int j=n;j>=a[i];j--)
        { 
            if(q[i]==0)
            {
                f[j]=max(f[j],f[j-a[i]]+a[i]*v[i]);
                if(g[i][1]!=0)
                {
                    f[j]=max(f[j],f[j-a[i]-g[i][1]]+a[i]*v[i]+g[i][1]*gv[i][1]);
                }
                if(g[i][2]!=0)
                {
                    f[j]=max(f[j],f[j-a[i]-g[i][2]]+a[i]*v[i]+g[i][2]*gv[i][2]);
                }
                if(g[i][1]!=0 && g[i][2]!=0)
                {
                    f[j]=max(f[j],f[j-a[i]-g[i][1]-g[i][2]]+a[i]*v[i]+g[i][1]*gv[i][1]+g[i][2]*gv[i][2]);
                }
            }
        }
    }
    cout<<f[n];
    return 0;
} 

|