hdu 3466 Proud Merchants

hdu 3466 

    最近,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;

}


你可能感兴趣的:(hdu 3466 Proud Merchants)