求助:只过了一半的点

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

zhaowangji @ 2019-07-11 16:26:05

#include<iostream>
using namespace std;
int n,m,k;
int a[60][3][2];
int f[32007];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        cin>>x>>y>>z;//v,p,q 
        if(z==0)a[++k][0][0]=x,a[k][0][1]=x*y;
        else if(!a[z][1][0])a[z][1][0]=x,a[z][1][1]=x*y;
        else if(!a[z][2][0])a[z][2][0]=x,a[z][2][1]=x*y;//存个物品的价格和重要度 
    }
    for(int i=1;i<=k;i++)//套模板 
        for(int j=n;j>=a[i][0][0]+a[i][1][0]+a[i][2][0];j-=10)
            f[j]=max(f[j],f[j-a[i][0][0]-a[i][1][0]-a[i][2][0]]+a[i][0][1]+a[i][1][1]+a[i][2][1]);
    cout<<f[n];
//  for(int i=1;i<=k;i++)
//  for(int j=0;j<=2;j++)
//  cout<<a[i][j][0]<<' '<<a[i][j][1]<<endl;//用来看存储是否正确 
    return 0;
}

|