解释可以看看这个博客
代码:
#include<iostream>
#include<stdio.h>
#include<string>
#include<queue>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<math.h>
using namespace std;
const int inf=0x3f3f3f3f;
int dp[5200];
struct good
{
int p,q,v;
}goods[520];
bool cmp(good a,good b)
{
return a.q-a.p<b.q-b.p;//?
}
int main()
{
int n,bag;
while(cin>>n>>bag)
{
for(int i=0;i<n;i++)
cin>>goods[i].p>>goods[i].q>>goods[i].v;
for(int i=0;i<=bag;i++)
dp[i]=0;
sort(goods,goods+n,cmp);
for(int i=0;i<n;i++)
{
for(int j=bag;j>=goods[i].q;j--)
{
dp[j]=max(dp[j],dp[j-goods[i].p]+goods[i].v);
}
}
cout<<dp[bag]<<endl;
}
}