最近,iSea想去一个古老的国家。很长一段时间,它都是世界上最富有强大的国家。因此,这个国家里的人一直非常骄傲,即使他们的国家不再那么富有。
商人最典型,他们每个人只卖一种物品,价格是Pi,但是如果你的钱少于Qi,他们不会卖给你东西,并且iSea对每件物品都有一个估价Vi。
如果他有M单位的钱,那么他能得到的最大价值是多少?
按照q-p排序,因为最小用到q-p,要保证每次计算所用到的dp[j-c]已经是最后的结果,所以要按q-p升序计算各个商品
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define nmaxn 510
#define maxn 5010
int max(int a,int b)
{
return a>b?a:b;
}
struct node{
int c,w,q;
}it[nmaxn];
int cmp(const void*a,const void*b)
{
node*c;
node*d;
c=(node*)a;
d=(node*)b;
return c->q-c->c > d->q-d->c?1:-1;
}
int n,m;
int dp[maxn];
int main()
{
int i,j,k,l;
while(~scanf("%d %d",&n,&m))
{
for(i=0;i<n;i++)
scanf("%d %d %d",&it[i].c,&it[i].q,&it[i].w);
qsort(it,n,sizeof(it[0]),cmp);
memset(dp,0,sizeof(dp));
for(i=0;i<n;i++)
{
for(j=m;j>=it[i].q;j--)
{
dp[j]=max(dp[j],dp[j-it[i].c]+it[i].w);
}
}
printf("%d\n",dp[m]);
}
return 0;
}