多重背包+完全背包。

买家:多重背包;售货员:完全背包;

开两个数组,分别计算出买家,售货员每个面额的最少张数。

最重要的是上界的处理:上界为maxw*maxw+m(maxw最大面额的纸币)。

(网上的证明)证明如下:

如果买家的付款数大于了maxw*maxw+m,即付硬币的数目大于了maxw,根据鸽笼原理,至少有两个的和对maxw取模的值相等,也就是说,这部分硬币能够用更少的maxw来代替。证毕。

其实我真心没看懂这个证明。不过我们可以猜想T一定不会太大,我开了10*T然后过了。

这一题学习了多重背包:

http://www.cnblogs.com/favourmeng/archive/2012/09/07/2675580.html

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<iostream>
  6. #include<algorithm>
  7. using namespace std;
  8.  
  9. const int N=,S=,INF=(int)1e9;
  10. int n,T,mx,v[N],c[N],f[S],g[S];
  11. int minn(int x,int y){return x<y ? x:y;}
  12. int maxx(int x,int y){return x>y ? x:y;}
  13.  
  14. int main()
  15. {
  16. // freopen("a.in","r",stdin);
  17. freopen("fewcoins.in","r",stdin);
  18. freopen("fewcoins.out","w",stdout);
  19. scanf("%d%d",&n,&T);
  20. mx=;
  21. for(int i=;i<=n;i++) {scanf("%d",&v[i]);mx=maxx(mx,v[i]);}
  22. for(int i=;i<=n;i++) scanf("%d",&c[i]);
  23. mx=mx*mx+T;
  24. // mx=10*T;
  25. memset(f,,sizeof(f));
  26. f[]=;
  27. for(int i=;i<=n;i++)
  28. for(int j=v[i];j<=mx;j++)
  29. f[j]=minn(f[j],f[j-v[i]]+);
  30.  
  31. memset(g,,sizeof(g));
  32. g[]=;
  33. for(int i=;i<=n;i++)
  34. {
  35. int now=c[i],j=;
  36. while(now>)
  37. {
  38. for(int k=mx;k>=j*v[i];k--)
  39. g[k]=minn(g[k],g[k-j*v[i]]+j);
  40. now-=j;
  41. j*=;
  42. }
  43. }
  44. int ans=INF;
  45. for(int i=T;i<=mx;i++)
  46. ans=minn(ans,g[i]+f[i-T]);
  47. if(ans==INF) printf("-1\n");
  48. else printf("%d\n",ans);
  49. return ;
  50. }

【poj3260-最少找零】多重背包+完全背包的更多相关文章

  1. usaco 最少找零

    Description 约翰在镇上买了 T 元钱的东西,正在研究如何付钱.假设有 N 种钞票,第 i 种钞票的面值为 Vi,约翰身上带着这样的钞票 Ci 张.商店老板罗伯是个土豪,所有种类的钞票都有无 ...

  2. codevs 3961 硬币找零【完全背包DP/记忆化搜索】

    题目描述 Description 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从银行拿回最少的硬币数,并保证能用这些硬币发工资. 我们应该 ...

  3. NYOJ 995 硬币找零

    硬币找零 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从 ...

  4. POJ 1252 Euro Efficiency(完全背包, 找零问题, 二次DP)

    Description On January 1st 2002, The Netherlands, and several other European countries abandoned the ...

  5. HDU3591找零,背包

    题目大概的意思就是:小强用硬币买东西,硬币有N种,面值为Vi,店家有各种硬币都有无限个,而小强只有Ci个(分别对应Vi) 问最小交易硬币数,就是一个有找零的背包问题啦. 我的上一篇博客跟这hdu359 ...

  6. POJ 3260 The Fewest Coins(多重背包问题, 找零问题, 二次DP)

    Q: 既是多重背包, 还是找零问题, 怎么处理? A: 题意理解有误, 店主支付的硬币没有限制, 不占额度, 所以此题不比 1252 难多少 Description Farmer John has g ...

  7. HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)

    HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...

  8. POJ 3260 The Fewest Coins(多重背包+全然背包)

    POJ 3260 The Fewest Coins(多重背包+全然背包) http://poj.org/problem?id=3260 题意: John要去买价值为m的商品. 如今的货币系统有n种货币 ...

  9. HDU_3591_(多重背包+完全背包)

    The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

随机推荐

  1. 【PHP】进一法取整、四舍五入取整、忽略小数等的取整数方法大全

    PHP取整数函数常用的四种方法,下面收集了四个函数:经常用到取整的函数,今天小小的总结一下!其实很简单,就是几个函数而已--主要是:ceil,floor,round,intval PHP取整数函数常用 ...

  2. 基于阿里云服务器Linux系统部署JavaWeb项目

    前段时间刚完成一个JavaWeb项目,想着怎么部署到服务器上,边学边做,花了点时间终于成功部署了,这里总结记录一下过程中所遇到的问题及解决方法.之所以选择阿里云,考虑到它是使用用户最多也是最广泛的云服 ...

  3. C++学习001-注释

    天了噜,感觉自己最近好堕落啊,  在等待项目任务书到来的时候,在来好好学习学习C++ 今天来学习一下C++的注释风格 编写环境 Qt 5.7 1. //注释 // ui->setupUi(thi ...

  4. python,批量生成指定格式的审核数据(传输参数格式为数组时)

    #思路#获取list长度(例如列表有20条数据,则生成20条数据),生成数组长度为list元素的数据,完成对列表20条数据的批量审核def createBatchData(self,str_in,li ...

  5. jmeter实例,如果有说明错误,请各位大神批评

    首先我们打开jmeter,今天录制的脚本的是获取QQ头像,找了好久才找到可以免费试用的接口,如果有什么错误的地方,欢迎大家提出来,我会及时修改,也给自己一次进步的机会,希望大家不吝赐教!!!如果有什么 ...

  6. SPRITEKIT游戏框架之关于PHYSICS物理引擎属性

    Spritekit提供了一个默认的物理模拟系统,用来模拟真实物理世界,可以使得编程者将注意力从力学碰撞和重力模拟的计算中解放出来,通过简单地代码来实现物理碰撞的模拟,而将注意力集中在更需要花费精力的地 ...

  7. JVM 什么时候会触发FGC

    1:System.gc(); 2:老年代满了 没啥好说的从年轻代去往老年代的 3:JDK7或JDK6中永久区满了 得看是否还会有分配,如果没有就不会进行FGC,不过CMS GC下会看到不停地CMS G ...

  8. LeetCode - 67. Add Binary(4ms)

    Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...

  9. 超像素 superpixels 是什么东西

    毕业设计要做图像分割 识别什么的. 看论文看到 superpixels 开始脑补是  像素插值算出来的 后来越看越不想,搜索发现根本是另外一回事 http://blog.sina.com.cn/s/b ...

  10. Uva 12627 Erratic Expansion(递归)

    这道题大体意思是利用一种递归规则生成不同的气球,问在某两行之间有多少个红气球. 我拿到这个题,一开始想的是递归求解,但在如何递归求解的思路上我的方法是错误的.在研读了例题上给出的提示后豁然开朗(顺便吐 ...