【BZOJ 1716】 [Usaco2006 Dec]The Fewest Coins 找零钱(背包dp)
题目
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)相关推荐
- 1716: [Usaco2006 Dec]The Fewest Coins 找零钱
n<=100种硬币,给每种的硬币的面额<=120和我每种有多少个<=10000,店主的硬币跟我一样但有无限个,求买t<=10000块钱的东西钱最少转手几次. 我拿的硬币最少几次 ...
- The Fewest Coins 找零钱
Description 农夫John想到镇上买些补给.为了高效地完成任务,他想使硬币的转手次数最少.即使他交付的硬币数与找零得到的的硬币数最少. John想要买T(1<=T<=10000) ...
- The Fewest Coins(多重背包+完全背包)
The Fewest Coins(多重背包+完全背包) Farmer John has gone to town to buy some farm supplies. Being a very eff ...
- 后缀数组2.0--Height数组(bzoj 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式)
前置技能:后缀数组 height[i]:排名第i的后缀与排名第i-1的后缀的最长公共前缀,也就是sa[i]和sa[i-1]的最长公共前缀 h[i]:以第i个字符为起点的后缀与排名在它前1名的后缀的最长 ...
- bzoj 1650: [Usaco2006 Dec]River Hopscotch 跳石子(二分)
1650: [Usaco2006 Dec]River Hopscotch 跳石子 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 721 Solved: ...
- bzoj 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐(暴力DFS)
1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 774 Solved: 480 ...
- The Fewest Coins (混合背包)
有的物品只可以取一次或不取(基本的0-1背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包),就是混合背包问题. The Fewest Coins 题意: 农夫John ...
- BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数(数位DP+恶心细节)
BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 Time Limit: 5 Sec Memory Limit: 64 MB Description 正如你所知 ...
- BZOJ 1717 [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组)
[题目链接]http://www.lydsy.com/JudgeOnline/problem.php?id=1717 [题目大意] 求一个最长的串,使得其在母串中出现的次数达到要求 [题解] 二分答案 ...
最新文章
- 一次 Jar 包升级引发的血案 amp; 解决
- 科普云计算知识,迎接云计算大会
- 【JS】执行上下文(ExcecutionContext)
- Linux环境变量PSI指什么,PSI 文件扩展名: 它是什么以及如何打开它?
- 关于肺结节检测相关的FROC曲线和目标检测中Precision-Recall曲线,ROC曲线,mAP,AP,APs,APm,APl,AP0.5等的理解。
- linux有名管道大小,Linux中的pipe与named pipe(FIFO),即管道和命名管道
- Servlet和JSP学习指南
- Android动画之属性动画
- java 解压rar_java 解压rar文件
- 博科Brocade系列光纤交换机报价 程鹏宇 13829750520
- 2020年10种最佳移动开发编程语言
- Lenovo家用台式与一体机预装Win8改装Win7的解决方案
- C#_CRC-16/CCITT-FALSE计算加判断
- 2019.03.26 bzoj4444: [Scoi2015]国旗计划(线段树+倍增)
- PPT文字过少时,如何排版比较好
- 什么是CPA?如何通过CPA推广模式赚钱呢?
- 什么是内网、外网?两者有何区别?
- 使用pandas模块实现数据的标准化
- Java工具类------Math类的详解及使用
- 保姆级Linux系统安装并使用libpng攻略