rt,第三个点下载下来是对的
#include <iostream>
using namespace std;
int n,m;
int dp[32001],w[61],v[61],item[61][3];
bool flag[61];
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int a,b,c;cin>>a>>b>>c;
b*=a;v[i]=a;w[i]=b;
if(c==0)flag[i]=1;
else{
item[c][0]++;
item[c][item[c][0]]=i;
}
}
for(int i=1;i<=n;i++)
{
if(flag[i]==0)continue;
for(int j=n;j>=0;j--)
{
int a=item[i][1],b=item[i][2],c=item[i][0];
if(j>=v[i])dp[j]=max(dp[j],dp[j-v[i]]+w[i]);
if(c>=1&&j>=v[i]+v[a])dp[j]=max(dp[j],dp[j-v[i]-v[a]]+w[i]+w[a]);
if(c>=2&&j>=v[i]+v[b])dp[j]=max(dp[j],dp[j-v[i]-v[b]]+w[i]+w[b]);
if(c>=2&&j>=v[i]+v[a]+v[b])dp[j]=max(dp[j],dp[j-v[i]-v[a]-v[b]]+w[i]+w[a]+w[b]);
}
}
cout<<dp[n];
return 0;
}
第三个点:
4500 12
100 3 0
400 5 0
300 5 0
1400 2 0
500 2 0
800 2 4
1400 5 4
300 5 0
1400 3 8
500 2 0
1800 4 0
440 5 10
答案:16700
求助%%%