HDOJ 1114 Piggy-Bank (完全背包)
来源:互联网 发布:java socket gui 实例 编辑:程序博客网 时间:2024/05/16 11:15
http://acm.hdu.edu.cn/showproblem.php?pid=1114
题意:已知空罐重量、当前重量、每种硬币的重量和面值,要求根据给定的储钱罐重量求出储钱罐内至少含有多少钱。
思路:要求恰好装满的完全背包(求最小值)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
注:本段文字来源于《背包问题九讲2.0 beta1.1》——崔添翼(Tianyi Cui)
初始化的细节问题
我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法。有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满。一种区别这两种问法的实现方法是在初始化的时候有所不同。
如果是第一种问法,要求恰好装满背包,那么在初始化时除了F[0] 为0,其它F[1::V] 均设为 1,这样就可以保证最终得到的F[V] 是一种恰好装满背包的最优解。如果并没有要求必须把背包装满,而是只希望价格尽量大,初始化时应该将F[0::V]全部设为0。
这是为什么呢?可以这样理解:初始化的F数组事实上就是在没有任何物品可以放入背包时的合法状态。如果要求背包恰好装满,那么此时只有容量为0的背包可以在什么也价值为0的情况下被“恰好装满”,其它容量的背包均没有合法的解,属于未定义的状态,应该被赋值为-∞ 了。如果背包并非必须被装满,那么任何容量的背包都有一个合法解“什么都不装”,这个解的价值为0,所以初始时状态的值也就全部为0了。
这个小技巧完全可以推广到其它类型的背包问题,后面不再对进行状态转移之前的初始化进行讲解。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include<stdio.h>#define maxn 2222222//用INT_MAX在bag[j-w[i]]+p[i]的时候会溢出int bag[11111]={0},p[555],w[555];//只有容量为0的背包可以在什么也不装且价值为0的情况下被“恰好装满”int main(){ int t,e,f,n,realw,i,j; while(scanf("%d",&t)==1) { while(t--) { scanf("%d %d",&e,&f);realw=f-e;scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d %d",&p[i],&w[i]);for(i=1;i<=realw;i++)bag[i]=maxn;//求最小值所以初值赋无穷大for(i=1;i<=n;i++)//表示该种物品有或没有(01背包){for(j=w[i];j<=realw;j++) { if(bag[j]>bag[j-w[i]]+p[i]) bag[j]=bag[j-w[i]]+p[i]; } }if(bag[realw]==maxn)printf("This is impossible.\n");elseprintf("The minimum amount of money in the piggy-bank is %d.\n",bag[realw]); } } return 0;}
- HDOJ 1114 Piggy-Bank 完全背包
- HDOJ 1114 Piggy-Bank (完全背包)
- HDOJ 1114 Piggy-Bank(完全背包,水)
- HDOJ-1114 Piggy-Bank 完全背包
- HDOJ 1114 Piggy-Bank(完全背包)
- 完全背包 HDOJ 1114 Piggy-Bank
- HDOJ 1114 Piggy-Bank (完全背包)
- HDOJ 题目1114Piggy-Bank(完全背包,动态规划)
- HDOJ(HDU).1114 Piggy-Bank (DP 完全背包)
- 完全背包- Piggy-Bank
- Piggy-Bank(完全背包)
- 完全背包,piggy-bank
- Piggy-Bank (完全背包)
- Piggy-Bank完全背包
- 【完全背包】Piggy - Bank
- Piggy-Bank(完全背包)
- HDOJ 1114 Piggy-Bank (多重背包)
- HDOJ--1114--Piggy-Bank【背包问题】
- Android system server之WatchDog看门狗分析
- 谈一谈 Windows 8 的软件开发架构
- 什么是最好的互联网盈利模式
- linux添加自动启动
- 一些思考
- HDOJ 1114 Piggy-Bank (完全背包)
- cocos2d-x程序流程
- C++ 中的特殊关键字
- HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)
- Android system server之PackageManagerService详细分析
- tocat 4.1中 HttpProcessor线程安全问题
- thinkphp修改头像
- 链接-简介
- hdu Max Sum of Max-K-sub-sequence 单调队列优化DP