https://www.luogu.org/problemnew/show/P1064
#include<iostream> #include<algorithm> #include<vector> using namespace std; int n,m; int dp[100008]; int v[65],p[65]; vector<int> appv[65],appp[65]; int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ int a,b,c; cin>>a>>b>>c; if(!c){ v[i]=a; p[i]=b; } else{ appv[c].push_back(a); appp[c].push_back(b); } } for(int i=1;i<=m;i++){ if(p[i]!=0){ for(int j=n;j>=v[i];j--){ dp[j]=max(dp[j],dp[j-v[i]]+v[i]*p[i]); if(appv[i].size()==1){ if(j>=appv[i][0]+v[i]){ dp[j]=max(dp[j],dp[j-appv[i][0]-v[i]]+appv[i][0]*appp[i][0]+v[i]*p[i]); } } else if(appv[i].size()==2){ if(j>=appv[i][0]+v[i]+appv[i][1]){ dp[j]=max(dp[j],dp[j-appv[i][0]-v[i]-appv[i][1]]+appv[i][0]*appp[i][0]+v[i]*p[i]+appv[i][1]*appp[i][1]); } if(j>=appv[i][0]+v[i]){ dp[j]=max(dp[j],dp[j-appv[i][0]-v[i]]+appv[i][0]*appp[i][0]+v[i]*p[i]); } if(j>=appv[i][1]+v[i]){ dp[j]=max(dp[j],dp[j-appv[i][1]-v[i]]+appv[i][1]*appp[i][1]+v[i]*p[i]); } } } } } cout<<dp[n]<<endl; return 0; }