题目描述

Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerful kingdom in the world. As a result, the people in this country are still very proud even if their nation hasn’t been so wealthy any more.
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?

题目大意

对于每一个物品,必须手上有一定的金额时才能购买,并且价格是p,价值是v,求最大的价值。

解法

非常容易可以发现,这道题的题干和01背包的题目异常的相似,不同的是有一个限制条件:在购买这个物品的时候手上必须要有一定的金钱。
那么我们就要考虑如何将这个限制条件加入到我们的动态规划中。
非常直接就可以得到如果我们当前枚举的花费\(j\)如果大于等于限制的话,那么就可以转移到f[j-b[i]]+v[i]。
但是我们会发现,如果一个物品的价值很大位置有很后面,但是这个物品的\(p\)和\(q\)的差值过大,那么就会让这个物品无法进入到状态中,那么就会使DP有后效性。
那么我们就需要进行排序,将那么限制和价格接近的放在前面,使01背包的规划成立。

代码

#include<bits/stdc++.h>
#define N 5005
#define inf 0x3f3f3f3f
using namespace std;
struct node{
    int a,b,v;
}s[N];
int f[N];
int n,m;
int r(){
    int w=0,x=0;char ch=0;
    while(!isdigit(ch))w|=ch=='-',ch=getchar();
    while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return w?-x:x;
}
bool cmp(node a,node b){return (a.b-a.a)<(b.b-b.a);}
int main(){
    while(scanf("%d%d",&n,&m)!=EOF){
        for(int i=0;i<=m;i++) f[i]=0;
        n=r(),m=r();
        for(int i=1;i<=n;i++) s[i].a=r(),s[i].b=r(),s[i].v=r();
        sort(s+1,s+1+n,cmp);
        for(int i=1;i<=n;i++){
            for(int j=m;j>=s[i].a;j--){
                if(j>=s[i].b) f[j]=max(f[j],f[j-s[i].a]+s[i].v);
            }
        }
        printf("%d\n",f[m]);
    }
    fclose(stdin); fclose(stdout);
    return 0;
}

[hdu3466]Proud Merchants的更多相关文章

  1. HDU3466 Proud Merchants[背包DP 条件限制]

    Proud Merchants Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) ...

  2. HDU3466 Proud Merchants [背包]

    题目传送门 Proud Merchants Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/O ...

  3. hdu3466 Proud Merchants(01背包)

    https://vjudge.net/problem/HDU-3466 一开始想到了是个排序后的背包,但是排序的策略一直没对. 两个物品1和2,当p1+q2>p2+q1 => q1-p1& ...

  4. HDU--3466 Proud Merchants (01背包)

    题目http://acm.hdu.edu.cn/showproblem.php?pid=3466 分析:这个题目增加了变量q 因此就不能简单是使用01背包了. 网上看到一个证明: 因为如果一个物品是5 ...

  5. Proud Merchants(01背包变形)hdu3466

    I - Proud Merchants Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  6. HDU 3466 Proud Merchants(01背包问题)

    题目链接: 传送门 Proud Merchants Time Limit: 1000MS     Memory Limit: 65536K Description Recently, iSea wen ...

  7. Proud Merchants

    Proud Merchants Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) To ...

  8. Proud Merchants(POJ 3466 01背包+排序)

    Proud Merchants Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) ...

  9. Proud Merchants(01背包)

    Proud Merchants Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) To ...

随机推荐

  1. 将WinForm程序(含多个非托管Dll)合并成一个exe的方法

    原文:将WinForm程序(含多个非托管Dll)合并成一个exe的方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. ILMerge能把托管dl ...

  2. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 上一篇介绍的基本的使用方式,自由度很高,但是编写的代码相对 ...

  3. libc.so.6: version 'GLIBC_2.14' not found报错提示的解决方案

    线上一台服务器在执行leveldb程序的时候,报错:"libc.so.6: version `GLIBC_2.14' not found". 排查原因及解决方法如下: 1)产生原因 ...

  4. DRBD详细解说及配置过程记录

    一.DRBD介绍 DRBD(Distributed ReplicatedBlock Device)是一种基于软件的,无共享,分布式块设备复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等 ...

  5. 基于SSH 供应链管理系统质量属性说明

    产品的易用程度如何,执行速度如何,可靠性如何,当发生异常情况时,系统如何处理.这些被称为软件质量属性,而特性是指系统非功能(也叫非行为)部分的需求. 性能:性能就是一个东西有多快,通常指响应时间或延迟 ...

  6. HDOJ2041_超级楼梯(斐波拉契数列)

    正常简单题:通过仔细观察推断即可看出这是一个斐波拉契数列的题目. HDOJ2041_超级楼梯 在做这题的时候我误入了思维盲区,只想着什么方法可以解决,没有看出是斐波拉契数列.因此第一次用组合数方法打了 ...

  7. python2 与 python3 实现共存

    已有配置  Anaconda2+python2.7 方案一:直接安装官网原生python3.6 1.修改根目录下python.exe ->python3.exe    pythonw.exe - ...

  8. 微信小程序cavas画图并保存

    需求背景: 因微信小程序暂不支持一键分享到朋友圈功能,故要生成图片并保存到手机相册就有两种情况: 1.需保存的图片为静态固定图片.这种情况图片可直接由后端返回,再调用小程序相应api直接保存到手机相册 ...

  9. docker container can not connect internet

    https://stackoverflow.com/questions/23810845/i-cant-get-docker-containers-to-access-the-internet htt ...

  10. JMX configuration for Tomcat

    Window下执行步骤: D:\apache-tomcat-7.0.57\bin\catalina.bat set CATALINA_OPTS=-Dcom.sun.management.jmxremo ...