题目描述

约翰在镇上买了 T 元钱的东西,正在研究如何付钱。假设有 N 种钞票,第 i 种钞票的面值为 Vi,约翰身上带着这样的钞票 Ci 张。商店老板罗伯是个土豪,所有种类的钞票都有无限张。他们有洁癖,所以希望在交易的时候,交换的钞票张数尽可能地少。请告诉约翰如何恰好付掉 T 元,而且在过程中交换的货币数量最少。

输入格式

• 第一行:两个整数 N 和 T,1 ≤ N ≤ 100, 1 ≤ T ≤ 10000

• 第二行:n个整数 Vi 第三行:n个整数 Ci,1 ≤ Vi ≤ 120, 0 ≤ Ci ≤ 10000

输出格式

单个整数:表示付钱找零过程中交换的最少货币数量,如果约翰的钱不够付账,或老板没法找 开零钱,输出 −1。

样例输入

3 70

5 25 50

5 2 1

样例输出

3

【题目 https://www.luogu.org/problemnew/show/2851】(蒟蒻不会弄链接,望大佬指点orz)

题解

易证,要求交换的货币数量最少,那么约翰付给罗伯的货币数最少,罗伯找给约翰的货币也最少。不妨分开来算。

设约翰身上总共有tot元钱,那么罗伯最多找给约翰tot-T元钱。现在我们知道罗伯有哪几种面值的钞票,以及他最多需要用这些钞票凑出的总额,而每种面值的钞票都有无限张,我们就可以求出罗伯凑出1~(tot-T)元钱分别需要的最少的货币数。这就是完全背包。

解决了罗伯,约翰也就比较简单了。

同样的,我们知道约翰有哪几种面值的钞票,以及每种钞票的数量,显然,约翰最多可以付tot元,和解决罗伯的方法类似,我们可以求出约翰凑出1~tot元钱分别需要的最少的货币数。多重背包出现了……

由于数据较大,多重背包要有二进制优化。否则会TLE!

还有,由于这两个背包都要恰好装满,要把数组初始化为无穷大。

最后,枚举约翰付的钱数,计算约翰需要付的最少货币数和罗伯需要找的最少货币数之和,求最小值。

#include <cstdio>
int n,T,w[105],c[105],v[1000005],g[1000005],f[1000005],t,tot,maxw;
const int inf=1e9;
int min(int x,int y)
{return x<=y?x:y;
}
int main()
{int i,j,k;scanf("%d%d",&n,&T);for (i=1;i<=n;i++)scanf("%d",&w[i]);for (i=1;i<=n;i++){scanf("%d",&c[i]);tot+=w[i]*c[i];  if (w[i]>maxw) maxw=w[i];}  if (tot<T) {printf("-1");return 0;}maxw=(maxw*maxw+T);for (i=1;i<1000005;i++)g[i]=f[i]=inf;  for (i=1;i<=n;i++)for (j=w[i];j<=maxw;j++)g[j]=min(g[j],g[j-w[i]]+1);for (i=1;i<=n;i++){for (j=1;j<=c[i];j<<=1){for (k=maxw;k>=j*w[i];k--)f[k]=min(f[k],f[k-j*w[i]]+j); c[i]-=j;  }if (c[i])for (j=maxw;j>=c[i]*w[i];j--)f[j]=min(f[j],f[j-c[i]*w[i]]+c[i]);     }int ans=inf;for (i=T;i<=maxw;i++)     ans=min(ans,f[i]+g[i-T]);if (ans<inf) printf("%d",ans);else printf("-1");return 0;
} 

转载于:https://www.cnblogs.com/rabbit1103/p/7794046.html

[USACO06DEC]最少的硬币The Fewest Coins相关推荐

  1. 洛谷P2851 [USACO06DEC]最少的硬币The Fewest Coins(完全背包+多重背包)

    题目描述 Farmer John has gone to town to buy some farm supplies. Being a very efficient man, he always p ...

  2. POJ 3260 The Fewest Coins 最少硬币个数(完全背包+多重背包,混合型)

    题意:FJ身上有各种硬币,但是要买m元的东西,想用最少的硬币个数去买,且找回的硬币数量也是最少(老板会按照最少的量自动找钱),即掏出的硬币和收到的硬币个数最少. 思路:老板会自动找钱,且按最少的找,硬 ...

  3. 洛谷P2851 [USACO06DEC]The Fewest Coins G 题解

    洛谷P2851 [USACO06DEC]The Fewest Coins G 题解 题目链接:P2851 [USACO06DEC]The Fewest Coins G 题意: Farmer John ...

  4. [USACO06DEC]The Fewest Coins G(混合背包)

    [USACO06DEC]The Fewest Coins G 题目描述 Farmer John has gone to town to buy some farm supplies. Being a ...

  5. 322. 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 你可以认为每

    零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 你可以认为每种硬币的数量 ...

  6. 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1

    /*** 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1.* 输入: coins = ...

  7. The Fewest Coins (混合背包)

    有的物品只可以取一次或不取(基本的0-1背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包),就是混合背包问题. The Fewest Coins 题意: 农夫John ...

  8. The Fewest Coins(多重背包+完全背包)

    The Fewest Coins(多重背包+完全背包) Farmer John has gone to town to buy some farm supplies. Being a very eff ...

  9. 【题目记录】——POJ 3260 The Fewest Coins 混合背包

    POJ 3260 The Fewest Coins 题目地址[POJ 3260 The Fewest Coins] 题意:John要去买价值为m的商品. 现在的货币系统有n种货币,对应面值为val[1 ...

最新文章

  1. 一篇文章学懂Shell脚本
  2. android 自定义switch控件,Android中switch自定义样式
  3. python中发送带附件的邮件,python SMTP实现发送带附件电子邮件
  4. 10本最火的中台与数字化转型图书,朋友圈都在传
  5. 关于Oracle表及字段的注释 转
  6. java 内存 min_Java内存区域
  7. 录制课程视频用什么软件?微课录屏软件等你来选!
  8. Android 集成支付宝第三方登录
  9. ArrayList集合学生管理系统,java笔试基础题
  10. 4399怎么修复游戏服务器,[ 服务器 ]4399官方服务器(改ip了)
  11. word中硬回车(enter)与软回车(shift+enter)
  12. javascript玩转ElasticSearch(一)
  13. yolov5训练自己的数据集,OpenCV DNN推理
  14. github、码云的使用
  15. 如何做好跨境电商店铺定位—扬帆牧哲
  16. html 感叹号代码,HTML电子邮件中的感叹号
  17. 高斯径向基函数的理解
  18. 微信小程序流量主怎么开通,小程序流量主开通步骤
  19. Rufus制作USB启动盘工具 重装系统
  20. android spc 能卸载吗,SPC 文件扩展名: 它是什么以及如何打开它?

热门文章

  1. phabricator 结合 arcanist 使用
  2. matlab中基于传递函数或者状态方程的幅频特性分析
  3. 【First-order Methods】 5 Smoothness and Strong Convexity
  4. Android Ui卡断的原因分析及常见的解决方式
  5. 安徽师大附中%你赛day4T1 金字塔 解题报告
  6. 范蠡传(司马迁-史记)
  7. 三角形,斜线,表头css实现方法
  8. 【HNOI2017】大佬-dalao
  9. 零数据分析实习经历如何秋招?
  10. H. Holy Grail(The Preliminary Contest for ICPC Asia Nanjing 2019题解)