Proud Merchants
The merchants were the most typical, each of them only sold exactly one item, the price was Pi, but they would refuse to make a trade with you if your money were less than Qi, and iSea evaluated every item a value Vi.
If he had M units of money, what’s the maximum value iSea could get?
Each test case begin with two integers N, M (1 ≤ N ≤ 500, 1 ≤ M ≤ 5000), indicating the items’ number and the initial money.
Then N lines follow, each line contains three numbers Pi, Qi and Vi (1 ≤ Pi ≤ Qi ≤ 100, 1 ≤ Vi ≤ 1000), their meaning is in the description.
The input terminates by end of file marker.
題意:首先給出物品數量和手中資金人後每樣物品給出價格,需要購買時手中至少需要多少資金,還有物品本身的價值要求求出最大資金
思路:0 1 揹包,要注意的是要先按 q-p 排序(使差值最小)
已AC代碼:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define Max(x,y) (x>y?x:y)
#define M 6000
using namespace std;
struct node{
int p,q,v;
}s[M];
int dp[M],n,m;
bool cmp(node a,node b)
{
return a.q-a.p < b.q-b.p;
}
int main()
{
int i,j;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<n;++i)
scanf("%d%d%d",&s[i].p,&s[i].q,&s[i].v);
sort(s,s+n,cmp);
memset(dp,0,sizeof(dp));
for(i=0;i<n;++i)
for(j=m;j>=s[i].q;--j)
dp[j]=Max(dp[j],dp[j-s[i].p]+s[i].v);
printf("%d\n",dp[m]);
}
return 0;
}