题目:
2 10 10 15 10 5 10 5 3 10 5 10 5 3 5 6 2 7 3
5 11
想法:动态规划。。方程是dp[j]=max(dp[j],dp[j-node[i].p]+node[i].v)
代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int MAXN=550;
struct Node
{
int p,q,v;
}node[MAXN];
int inline max(int a,int b)
{
return a>b?a:b;
}
int dp[5500];
bool cmp(Node a,Node b)
{
return a.q-a.p < b.q-b.p;
}
int main()
{
int n,i,m;
//freopen("r.txt","r",stdin);
while(cin>>n>>m)
{
for(i=0;i<n;i++)
cin>>node[i].p>>node[i].q>>node[i].v;
sort(node,node+n,cmp);
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
for(int j=m;j>=node[i].q;j--)
dp[j]=max(dp[j],dp[j-node[i].p]+node[i].v);
cout<<dp[m]<<endl;
}
return 0;
}
好难。。