题目描述

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背包的规划成立。

代码

  1. #include<bits/stdc++.h>
  2. #define N 5005
  3. #define inf 0x3f3f3f3f
  4. using namespace std;
  5. struct node{
  6. int a,b,v;
  7. }s[N];
  8. int f[N];
  9. int n,m;
  10. int r(){
  11. int w=0,x=0;char ch=0;
  12. while(!isdigit(ch))w|=ch=='-',ch=getchar();
  13. while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
  14. return w?-x:x;
  15. }
  16. bool cmp(node a,node b){return (a.b-a.a)<(b.b-b.a);}
  17. int main(){
  18. while(scanf("%d%d",&n,&m)!=EOF){
  19. for(int i=0;i<=m;i++) f[i]=0;
  20. n=r(),m=r();
  21. for(int i=1;i<=n;i++) s[i].a=r(),s[i].b=r(),s[i].v=r();
  22. sort(s+1,s+1+n,cmp);
  23. for(int i=1;i<=n;i++){
  24. for(int j=m;j>=s[i].a;j--){
  25. if(j>=s[i].b) f[j]=max(f[j],f[j-s[i].a]+s[i].v);
  26. }
  27. }
  28. printf("%d\n",f[m]);
  29. }
  30. fclose(stdin); fclose(stdout);
  31. return 0;
  32. }

[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. 转 edtools

     1.下载工具包:edtools.rar ,解压后放到磁盘的何意一个目录,如D:\edTools. 2.打开ED,打开“工具”-“配置用户工具”,在弹出的对象框中,在“组和工具项目”下拉框中选择一个工 ...

  2. CYJian的水题大赛

    实在没忍住就去打比赛了然后一耗就是一天 最后Rank19还是挺好的(要不是乐多赛不然炸飞),这是唯一一套在Luogu上号称水题大赛的而实际上真的是水题大赛的比赛 好了我们开始看题 T1 八百标兵奔北坡 ...

  3. Asp.Net MVC 获取当前 Controller Action Area

    获取控制器名称: ViewContext.RouteData.Values["controller"].ToString(); 获取Action名称: ViewContext.Ro ...

  4. 案例学python——案例一:抓图

    最近项目不那么紧张,有时间来研究一下Python,先前断断续续的自学了一段时间,有些浅基础.刚好在码云上看到比较适合的案例,跟着案例再往前走一波. 案例一:爬虫抓图 开发工具:PyCharm    脚 ...

  5. .net core实践系列之短信服务-为什么选择.net core(开篇)

    前言 从今天我将会写.net core实战系列,以我最近完成的短信服务作为例子.该系列将会尽量以最短的时间全部发布出来.源码也将优先开源出来给大家. 源码地址:https://github.com/S ...

  6. (11)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Thrift高效通讯 (完结)

    一. 什么是 RPC Restful 采用 Http 进行通讯,优点是开放.标准.简单.兼容性升级容易: 缺点是性能略低.在 QPS 高或者对响应时间要求苛刻的服务上,可以用 RPC(Remote P ...

  7. Vue中axios访问 后端跨域问题

    public class AllowOriginFilter implements Filter { @SuppressWarnings("unused") public void ...

  8. Centos下堡垒机Jumpserver V3.0环境部署完整记录(2)-配置篇

    前面已经介绍了Jumpserver V3.0的安装,基于这篇安装文档,下面说下Jumpserver安装后的的功能使用: 一.jumpserver的启动 Jumpserver的启动和重启 [root@t ...

  9. linux内核分析第六次实验

    使用gdb跟踪创建新进程的过程 rm menu -rf git clone https://github.com/mengning/menu.git  mv test_fork.c test.c  执 ...

  10. 《Linux内核设计与实现》 第五章学习笔记

    第五章 系统调用 在现代操作系统中,内核提供了进程与内核进行交互的一组接口.有如下作用: 让应用程序受限的访问硬件设备 提供了创新进程并与已有进程进行通信的机制 提供了申请操作系统其它资源的能力 保证 ...