https://www.luogu.org/problemnew/show/P1064
题意:和开心的金明不一样的是有附属关系,
#include<bits/stdc++.h>
using namespace std;
int dp[33000],w[100],w1[100],w2[100];
int e[100],e1[100],e2[100];
int main()
{
int n,m;
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++)
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(c==0)
{
w[i]=a,e[i]=b;
}
else
{
if(w1[c]==0)
{
w1[c]=a,e1[c]=b;
}
else
{
w2[c]=a;e2[c]=b;
}
}
}
for(int i=1;i<=m;i++)
{
for(int j=32000;j>=w[i];j--)
{
if(j-w[i]>=0) dp[j]=max(dp[j],dp[j-w[i]]+w[i]*e[i]);//只有主
if(j-w[i]-w1[i]>=0) dp[j]=max(dp[j],dp[j-w[i]-w1[i]]+w[i]*e[i]+w1[i]*e1[i]);//附属1
if(j-w[i]-w2[i]>=0) dp[j]=max(dp[j],dp[j-w[i]-w2[i]]+w[i]*e[i]+w2[i]*e2[i]);//附属2
if(j-w[i]-w1[i]-w2[i]>=0) dp[j]=max(dp[j],dp[j-w[i]-w1[i]-w2[i]]+w[i]*e[i]+w1[i]*e1[i]+w2[i]*e2[i]);//附属1和附属2
}
}
printf("%d\n",dp[n]);
}