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;

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值