3466 ACM Proud Merchants 变形的01背包】的更多相关文章

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3466 题意:假设你有M元,已经Pi,Qi,Vi(i为角标,1<i<N),当M>Qi,时才能购买该商品,得到价值Vi,问得到的最大的价值. 思路:知道是变形的01背包问题,但是思考了很久不知道怎么解决,于是看了好几种不同款式的大佬的代码和证明才看懂,如下是自己写的证明: 如果不改变,直接用01背包的话呢,就是: for(int i=0;i<n;i++) for(int j=v;j>=a…
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 merchan…
题目链接:https://vjudge.net/contest/103424#problem/J 转载于:https://www.bbsmax.com/A/RnJW16GRdq/ 题目大意: 有n个商品m块钱,给出买每个商品所花费的钱P.钱包里需要至少Q才有资格买.商品的价值V.问你如何购买商品的价值最大. 解题分析:考虑下面的例子:A:p1=5, q1=10, v1=5; B:p2=3, q2=5, v2=6; 如果先买物品A再买物品B的话我至少需要10元钱,也就是money >= p1+q2…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466 n个商人,每个商人有一个物品,物品有价格p.价值v还有一个交易限制q.q的意义是假如你现在拥有的钱数小于q,那么是不允许交易的. 由于拥有了q这个量,使得整个交易过程有了顺序,这显然破坏了dp的无后效性.我们可以考虑如何先确定这个顺序,让我们可以正常使用dp. 贪心选取q小p大的,也就是q-p差值从小到大排序.这样可以大致确定一个选择顺序,不会证. #include <algorithm>…
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 merchan…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466 与顺序有关的01背包. 如果一个物品p = 5,q = 7,一个物品p = 5,q = 9,如果先算第一个,那么当次只有7,8...m可以进行状态转移,装第二个物品的时候9,10..m进行转移,第二个物品转移就可以借用第一个物品的那些个状态,而第二个物品先转移,第一个再转移则不能.当然,还有价格有关,当限制一样价格不同时顺序就影响结果.一种组合的排序策略--限制又小价格又贵的先选,也就是q-p…
题意: 强盗抢银行,在不被抓住的情况下,想尽量多的偷点钱.已知各个银行的金钱和被抓的概率,以及强盗能容忍的最大不被抓的概率(小于等于该概率才能不被抓),求最多能抢到钱? 并不是简单的01背包问题? 1.概率是浮点数 2.最大不被抓的概率不是简单相加,由概率论可知,要抢的几家银行同时不被抓,要相乘.P=(1-P1)(1-P2)(1-P3) (P为最大不被抓的概率,P1 P2 P3为各个银行被抓的概率) 难点: 通常的01背包模板: for(int j=v;j>=a[i].w;j–)//v是容积(拥…
![勾选C++才能过 题意: 先规定可以报销一定额度的发票,物品类型有A,B,C,三种.要求每张发票总额不得超过1000元,单项物品不得超过600.求报销的最大额 分析: 先找到合格的发票,然后再挑选总额最大的几张发票(01背包来解决) 如何找出合格发票? 1.发票中只有ABC着三种物品 2.单张发票的额度<=1000. 3.一张发票中,单项物品总额<=600 题目中的价钱都是浮点数,01背包只能处理整数,怎么办? 题目给的数据最多两位数(题目没说保留几位小数),所以我们可以把数据都*100,…
Dream City Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice ZOJ 3211 Description JAVAMAN is visiting Dream City and he sees a yard of gold coin trees. There are n trees in the yard. Let's call them tre…
题意:装骨头的容器大小固定,有一堆骨头,已知骨头的价值和大小,在不超过容积大小的情况下,问:所装骨头的最大价值? 思路:典型的01背包问题,不需要有任何的变动. 模板: for(int j=v;j>=a[i].w;j–) //v是容积 { dp[j]=max(dp[j],dp[j-a[i].w]+a[i].val); } 注意: 1 数组dp的必须初始化(memset( dp,0,sizeof(dp))),还要够大,但是用int 定义就好了 2 输出结果后要换行(\n) 3 要勾选C++才能过…