题目

Description

农夫John想到镇上买些补给。为了高效地完成任务,他想使硬币的转手次数最少。即使他交付的硬币数与找零得到的的硬币数最少。 John想要买T(1<=T<=10000)样东西。有N(1<=n<=100)种货币参与流通,面值分别为V1,V2…Vn (1<=Vi<=120)。John有Ci个面值为Vi的硬币(0<=Ci<=10000)。我们假设店主有无限多的硬币,并总按最优方案找零。

Input
  • Line 1: 两个整数 N 与 T 。

  • Line 2: N 个数,表示 V1, V2, …Vn。

  • Line 3: N 个数,表示 C1, C2, …Cn。

Output
  • Line 1: 一个整数,表示最优方案的转手次数,如无解输出-1。
Sample Input

3 70
5 25 50
5 2 1

Sample Output

3

原题传送门

思路

题目思维难度并不大。
一个多重背包+完全背包。
我们对约翰做多重背包,对老板做完全背包。
然而,错了n次,极度怀疑我自己。
调了一个小时,发现,最大值设的太大了。。。 溢出了。。。
哎……

代码

#include <bits/stdc++.h>using namespace std;
const int M = 110, N = 10000+120*120+10;
int dp1[N], dp2[N], v[M], c[M];int main() {ios::sync_with_stdio(false);int n, t, maxn = 0; cin >> n >> t;for (int i = 0; i < n; i++)cin >> v[i], maxn = max(maxn, v[i]);maxn = maxn*maxn;int maxm = t+maxn;for (int i = 0; i < n; i++) cin >> c[i];for (int i = 0; i <= maxm; i++) dp1[i] = dp2[i] = 129237174;dp1[0] = 0, dp2[0] = 0;for (int i = 0; i < n; i++) {int k = 1, sum = 0;while (sum < c[i]) {for (int j = maxm; j >= v[i]*k; j--)dp1[j] = min(dp1[j], dp1[j-v[i]*k]+k);sum += k;if (sum+k*2 > c[i]) k = c[i]-sum;else k *= 2;}}for (int i = 0; i < n; i++)for (int j = v[i]; j < maxn; j++)dp2[j] = min(dp2[j], dp2[j-v[i]]+1);int ans = 129237154;for (int i = t; i <= maxm; i++)ans = min(ans, dp1[i]+dp2[i-t]);if (ans == 129237154) cout << -1 << endl;else cout << ans << endl;return 0;
}

【BZOJ 1716】 [Usaco2006 Dec]The Fewest Coins 找零钱(背包dp)相关推荐

  1. 1716: [Usaco2006 Dec]The Fewest Coins 找零钱

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

  2. The Fewest Coins 找零钱

    Description 农夫John想到镇上买些补给.为了高效地完成任务,他想使硬币的转手次数最少.即使他交付的硬币数与找零得到的的硬币数最少. John想要买T(1<=T<=10000) ...

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

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

  4. 后缀数组2.0--Height数组(bzoj 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式)

    前置技能:后缀数组 height[i]:排名第i的后缀与排名第i-1的后缀的最长公共前缀,也就是sa[i]和sa[i-1]的最长公共前缀 h[i]:以第i个字符为起点的后缀与排名在它前1名的后缀的最长 ...

  5. bzoj 1650: [Usaco2006 Dec]River Hopscotch 跳石子(二分)

    1650: [Usaco2006 Dec]River Hopscotch 跳石子 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 721  Solved: ...

  6. bzoj 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐(暴力DFS)

    1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 774  Solved: 480 ...

  7. The Fewest Coins (混合背包)

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

  8. BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数(数位DP+恶心细节)

    BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 Time Limit: 5 Sec  Memory Limit: 64 MB Description 正如你所知 ...

  9. BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)

    [题目链接]http://www.lydsy.com/JudgeOnline/problem.php?id=1717 [题目大意] 求一个最长的串,使得其在母串中出现的次数达到要求 [题解] 二分答案 ...

最新文章

  1. 一次 Jar 包升级引发的血案 amp; 解决
  2. 科普云计算知识,迎接云计算大会
  3. 【JS】执行上下文(ExcecutionContext)
  4. Linux环境变量PSI指什么,PSI 文件扩展名: 它是什么以及如何打开它?
  5. 关于肺结节检测相关的FROC曲线和目标检测中Precision-Recall曲线,ROC曲线,mAP,AP,APs,APm,APl,AP0.5等的理解。
  6. linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道
  7. Servlet和JSP学习指南
  8. Android动画之属性动画
  9. java 解压rar_java 解压rar文件
  10. 博科Brocade系列光纤交换机报价 程鹏宇 13829750520
  11. 2020年10种最佳移动开发编程语言
  12. Lenovo家用台式与一体机预装Win8改装Win7的解决方案
  13. C#_CRC-16/CCITT-FALSE计算加判断
  14. 2019.03.26 bzoj4444: [Scoi2015]国旗计划(线段树+倍增)
  15. PPT文字过少时,如何排版比较好
  16. 什么是CPA?如何通过CPA推广模式赚钱呢?
  17. 什么是内网、外网?两者有何区别?
  18. 使用pandas模块实现数据的标准化
  19. Java工具类------Math类的详解及使用
  20. 保姆级Linux系统安装并使用libpng攻略

热门文章

  1. 升级成RESP3后,不仅多了13种新的数据类型,效率也提升了
  2. 线性调频脉冲雷达信号
  3. Dell PowerEdge R740xd解析:服务器只看参数那就错了
  4. ps滤镜之——马赛克
  5. xposed新版52下载_kyqp游戏合集-kyqp游戏下载推荐
  6. 基于微信小程序编写的AI配音界面
  7. html简单淘宝搜索框怎么做,天猫前端系列教材 (八)- 公共页面 - 简单搜索栏...
  8. 找不到NC系统VO以及方法的解决方法
  9. Java中多态的表现形式
  10. java fit 16s,16s分析之差异OTU 挑选(edgeR)