40分,哇了6个点

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

不败败寇 @ 2019-09-06 19:38:29

#include<bits/stdc++.h>

using namespace std;
const int V=32020;
int v[65][3],p[65][3],size[65],m[V];
int n0,m0;
int main(){
    scanf("%d%d",&n0,&m0);
    for(int i=1;i<=m0;i++){
        int v0,p0,q0;
        scanf("%d%d%d",&v0,&p0,&q0);
        if(!q0){
            v[i][0]=v0;
            p[i][0]=p0*v0;
        }
        else{
            size[q0]++;
            v[q0][size[q0]]=v0;
            p[q0][size[q0]]=p0*v0;
        }
    } 
    for(int i=1;i<=m0;i++){
        for(int j=n0;j>=v[i][0];j--){
            m[j]=max(m[j],m[j-v[i][0]]+p[i][0]);
            for(int k=1;k<=size[i];k++){
                if(j>=v[i][0]+v[i][k])
                    m[j]=max(m[j],m[j-v[i][0]-v[i][k]]+p[i][0]+p[i][k]);
            }
        }
    }
    printf("%d",m[n0]);
    return 0;
} 

|