HDU1114 Piggy-Bank 【全然背包】
Piggy-Bank
But there is a big problem with piggy-banks. It is not possible to determine how much money is inside. So we might break the pig into pieces only to find out that there is not enough money. Clearly, we want to avoid this unpleasant situation. The only possibility is to weigh the piggy-bank and try to guess how many coins are inside. Assume that we are able to determine the weight of the pig exactly and that we know the weights of all coins of a given currency. Then there is some minimum amount of money in the piggy-bank that we can guarantee. Your task is to find out this worst case and determine the minimum amount of cash inside the piggy-bank. We need your help. No more prematurely broken pigs!
题意:给定一个空储钱罐的重量和满储钱罐的重量。再给定一些硬币种类的价值和重量。每一种硬币都有无数个。问:在储钱罐里如何放硬币能使得总价值最小且总重量正好和满储钱罐重量相等。
题解:全然背包入门题。状态转移方程为dp[i][j] = min(dp[i-1][j-k*w[i]] + k*v[i]) 0<=k<=totalWeight/w[i],跟01背包一样,全然背包dp数组也能够压缩成一维数组。
仅仅只是内层循环要顺序。而01背包是逆序
。
另外这题在初始化dp数组时有个陷阱:对于在函数外定义的数组。若对它使用memset(dp + 1, -1, sizeof(dp + 1));那么将仅仅有一个元素被初始化为-1,其余的全为0.可是若是memset(dp, -1, sizeof(dp));数组就能够所有初始化为-1。
#include <stdio.h>
#include <string.h>int dp[10002];int main()
{int totalWeight, weight, val, n, t, i, j;scanf("%d", &t);while(t--){scanf("%d%d", &weight, &totalWeight);totalWeight -= weight;scanf("%d", &n);memset(dp + 1, -1, sizeof(int) * 10001); for(i = 1; i <= n; ++i){scanf("%d%d", &val, &weight);for(j = weight; j <= totalWeight; ++j){if(dp[j - weight] != -1){if(dp[j] == -1 || dp[j] > dp[j - weight] + val)dp[j] = dp[j - weight] + val;}}}if(dp[totalWeight] == -1) printf("This is impossible.\n");else printf("The minimum amount of money in thepiggy-bank is %d.\n",dp[totalWeight]);}return 0;
}
转载于:https://www.cnblogs.com/mthoutai/p/6851628.html
HDU1114 Piggy-Bank 【全然背包】相关推荐
- piggy bank 完全背包
题目描述 Before ACM can do anything, a budget must be prepared and the necessary financial support obtai ...
- 01背包模板、全然背包 and 多重背包(模板)
转载请注明出处:http://blog.csdn.net/u012860063 贴一个自觉得解说不错的链接:http://www.cppblog.com/tanky-woo/archive/2010/ ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- UVA 10306 e-Coins(全然背包: 二维限制条件)
UVA 10306 e-Coins(全然背包: 二维限制条件) http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Item ...
- HDU1248 寒冰王座 【数学题】or【全然背包】
寒冰王座 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 杭电 1248 寒冰王座(全然背包)
http://acm.hdu.edu.cn/showproblem.php? pid=1248 寒冰王座 Time Limit: 2000/1000 MS (Java/Others) Memor ...
- java实现动态规划算法解决存钱罐问题(piggy bank)
一.实验目的 练习使用动态规划算法解决实际问题(使用Java语言实现) 二.实验内容 [问题描述] 给定一个空存钱罐的重量和这个存钱罐最多能装进去的重量,现在需要在不打破这个存钱罐的情况下猜测里面最少 ...
- CODEVS 3269 混合背包
一道裸的混合背包题目.可是忘记了去重一直TLE,就是假设体积<=全然背包的01.和多重背包都要被全然背包代替,由于他的数量没限制所以用起来更方便. 题目连接:http://codevs.cn/p ...
- hdu2844 amp; poj1742 Coin ---多重背包--两种方法
意甲冠军:你有N种硬币,每个价格值A[i],每个号码C[i],要求. 在不超过M如果是,我们用这些硬币,有多少种付款的情况下,.那是,:1,2,3,4,5,....,M这么多的情况下,,你可以用你的硬 ...
最新文章
- Windows批处理中的等待技巧
- 虚拟机在Hyper-V和Citrix Xenserver上的区别
- 开源短地址_如何在短短5分钟内完成您的第一个开源贡献
- C++学习之路 | PTA乙级—— 1038 统计同成绩学生 (20 分)(精简)
- 带你探索CPU调度的奥秘
- Mysql高可用设计入门
- 定向士官学计算机网络技术可以吗,山东信息职业技术学院2016年定向培养士官招生问答...
- 【ps-course】layer 图层
- 利用百度智能云-文字识别 auto.js
- 保证线程安全的四种方法
- 查询收尾、带子查询的数据更新、视图 4.12数据库课程实验
- SQL SERVER 使用stuff函数进行分组且合并
- Mysql优化之6年工作经验总结
- 天然肠衣数学建模matlab代码,数学建模天然肠衣搭配问题.doc
- 【新手向】emacs配置文件
- 计算机系统设计原理pdf百度云,计算机操作系统教程--核心与设计原理习题1答案.pdf...
- 淘沙时代靠谱吗-淘宝私域流量指什么?怎么获得?
- VMware ESXi安装window10方法
- 藏地传奇真言专题简单小结
- OpenStack该不该“隐形”?