n<=100种硬币,给每种的硬币的面额<=120和我每种有多少个<=10000,店主的硬币跟我一样但有无限个,求买t<=10000块钱的东西钱最少转手几次。

我拿的硬币最少几次就是多重背包,店主还的最少当然是完全背包啦,那问题在于这个背包多大呀?

找回来的钱和我给的钱一定没有交集,如果有,那当初少给点就好了。我们需要找钱,究其原因是要用给的钱若干减去找的钱若干凑到t。那么极端地,要凑t%vmax*2次才能凑到和t在%vmax同个值的数。而这意味着我们要多出最多vmax^2块钱。

看不懂就对了!代码在下面,要严谨去看看其他大爷的博客吧!

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<algorithm>
  5. //#include<iostream>
  6. using namespace std;
  7.  
  8. int n,m,t;
  9. #define maxn 111
  10. #define maxm 25011
  11. int f[maxm],g[maxm],v[maxn],c[maxn];
  12. int que[maxm],head,tail,id[maxm],vmax;
  13. const int inf=0x3f3f3f3f;
  14. int main()
  15. {
  16. scanf("%d%d",&n,&t);vmax=;
  17. for (int i=;i<=n;i++) scanf("%d",&v[i]),vmax=max(vmax,v[i]);
  18. for (int i=;i<=n;i++) scanf("%d",&c[i]);
  19. int m=t+vmax*vmax;
  20. f[]=g[]=;for (int i=;i<=m;i++) f[i]=g[i]=inf;
  21. for (int i=;i<=n;i++)
  22. for (int j=;j<v[i];j++)
  23. {
  24. head=tail=;
  25. for (int k=,now;(now=k*v[i]+j)<=m;k++)
  26. {
  27. int tmp=f[now]-k;
  28. while (head<tail && que[tail-]>tmp) tail--;
  29. while (head<tail && id[head]<k-c[i]) head++;
  30. que[tail]=tmp;id[tail++]=k;
  31. f[now]=min(inf,que[head]+k);
  32. }
  33. }
  34. for (int i=;i<=n;i++)
  35. for (int j=;j<v[i];j++)
  36. {
  37. int Min=inf;
  38. for (int k=j;k<=m;k+=v[i])
  39. {
  40. Min=min(Min,g[k]-k/v[i]);
  41. g[k]=Min+k/v[i];
  42. }
  43. }
  44. int ans=inf;
  45. for (int i=t;i<=m;i++) ans=min(ans,f[i]+g[i-t]);
  46. printf("%d\n",ans==inf?-:ans);
  47. return ;
  48. }

1716: [Usaco2006 Dec]The Fewest Coins 找零钱的更多相关文章

  1. BZOJ 1649: [Usaco2006 Dec]Cow Roller Coaster( dp )

    有点类似背包 , 就是那样子搞... --------------------------------------------------------------------------------- ...

  2. 1715: [Usaco2006 Dec]Wormholes 虫洞

    1715: [Usaco2006 Dec]Wormholes 虫洞 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 501  Solved: 278[Sub ...

  3. BZOJ#1717:[Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组+单调队列)

    1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的 ...

  4. 动态规划--找零钱 coin change

    来自http://www.geeksforgeeks.org/dynamic-programming-set-7-coin-change/ 对于整数N,找出N的所有零钱的表示.零钱可以用S={s1,s ...

  5. The Fewest Coins POJ - 3260

    The Fewest Coins POJ - 3260 完全背包+多重背包.基本思路是先通过背包分开求出"付出"指定数量钱和"找"指定数量钱时用的硬币数量最小值 ...

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

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

  7. [LeetCode] 由 “找零钱" 所想

    Ref: [Optimization] Dynamic programming[寻找子问题] Ref: [Optimization] Advanced Dynamic programming[优于re ...

  8. POJ 3260 The Fewest Coins(完全背包+多重背包=混合背包)

    题目代号:POJ 3260 题目链接:http://poj.org/problem?id=3260 The Fewest Coins Time Limit: 2000MS Memory Limit: ...

  9. 后台开发 3个题目 array_chunk, 100块钱找零钱(动态规划 dynamic programming), 双向循环链表 llist 删除节点

    1. array_chunk 实现 http://php.net/manual/en/function.array-chunk.php <?php function my_array_chunk ...

随机推荐

  1. 【转】数据库CRUD操作

    数据库CRUD操作 一.删除表   drop table 表名称 二.修改表 alter   table 表名称 add  列名 数据类型   (add表示添加一列) alter  table  表名 ...

  2. APP设计细节总结-摘录

    视觉表现型问题 1. 统一的图标设计风格 2. 图标大小的视觉平衡(根据图标的体量对其大小做出相应的调整) 3. 优化你的分割线(通常我们会选择浅色而否定深色) 4. 合理的运用投影的颜色与透明度 5 ...

  3. Oracle的Central Inventory和Local inventory详解

    很多朋友对Oracle的inventory信息不太了解以至遇到相关的问题不知道如何处理,这篇文章我们将详细讲解Oracle的Central Inventory (oraInventory)和Local ...

  4. SpringBoot集成FastDFS+Nginx整合基于Token的防盗链

    为什么要用SpringBoot? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...

  5. Python3简明教程(二)—— 变量和数据类型

    关键字和标识符 下列的标识符是Python3的关键字,并且不能用于通常的标识符.关键字必须严格按照下面的拼写: False def if raise None del import return Tr ...

  6. vscode 快捷键 ctrl+shift+F 冲突了 解决办法

    vscode 快捷键 ctrl+shift+F 冲突了 解决办法 1.修复 搜狗输入法 ctrl+shift+F 中文 繁体简体的快捷键冲突 2.修复 微软输入法  ctrl+shift+F 冲突 ( ...

  7. 总结vue2.0 配置的实例方法

    总结vue2.0 配置的实例方法 http://www.php.cn/js-tutorial-369603.html

  8. postman使用方法详解

    postman的使用方法详解   Collections:在Postman中,Collection类似文件夹,可以把同一个项目的请求放在一个Collection里方便管理和分享,Collection里 ...

  9. Windows SubSystem for Linux(WSL)设置默认和设置默认登陆用户

    使用wslconfig命令进行管理 1.  设置默认运行的linux系统 wslconfig /setdefault <DistributionName> 正如上面所说,如果执行wslco ...

  10. 为什么我的 app:actionViewClass="android.widget.SearchView"和app:showAsAction="ifRoom|collapseActionView"才有

    http://blog.csdn.net/cdnight/article/details/48029911 <item android:id="@+id/action_search&q ...