40pts求助,后面都是WA

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

AdGats @ 2021-08-11 09:33:37

#include<bits/stdc++.h>
using namespace std;
const int N=3.2e4+5,M=65;
int n,m,v[M],p[M],q[M],s[M][M],dp[N],ans;
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        cin>>v[i]>>p[i]>>q[i];
        s[q[i]][0]++;
        s[q[i]][s[q[i]][0]]=i;
    }
    for(int i=1;i<=m;i++)
        if(!q[i])
            for(int j=n;j>=v[i];j--){
                int tmp=max(dp[j],dp[j-v[i]]+v[i]*p[i]);
                if(j-v[i]-v[s[i][1]]-v[s[i][2]]>=0) tmp=max(tmp,dp[j-v[i]-v[s[i][1]]-v[s[i][2]]]+v[i]*p[i]+v[s[i][1]]*p[s[i][1]]+v[s[i][2]*p[s[i][2]]]);
                if(j-v[i]-v[s[i][1]]>=0)    tmp=max(tmp,dp[j-v[i]-v[s[i][1]]]+v[i]*p[i]+v[s[i][1]]*p[s[i][1]]);
                if(j-v[i]-v[s[i][2]]>=0)    tmp=max(tmp,dp[j-v[i]-v[s[i][2]]]+v[i]*p[i]+v[s[i][2]]*p[s[i][2]]);
                dp[j]=max(dp[j],tmp);
            }
    cout<<dp[n]<<"\n";
}

|