HDU 1114 Piggy-Bank(完全背包问题)
2013-08-01 15:42
423 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1114
思路:
此题的解法是完全背包的问题,但是要注意的几点:
(1)求的是最小的代价,与以往的题目求最大的代价不同,但是只要把状态转移方程中的Max函数改成Min函数就OK;
(2)因为题目是要求最小的代价的同时,而且要保证恰好装满背包,所以初始化dp[]数组时,除了dp[0]=0外;
其它的dp[]值都要初始化无穷大(inf=0x3f3f3f3f);
(3)最后输出的判断,看下面代码的处的注释;
AC代码:
思路:
此题的解法是完全背包的问题,但是要注意的几点:
(1)求的是最小的代价,与以往的题目求最大的代价不同,但是只要把状态转移方程中的Max函数改成Min函数就OK;
(2)因为题目是要求最小的代价的同时,而且要保证恰好装满背包,所以初始化dp[]数组时,除了dp[0]=0外;
其它的dp[]值都要初始化无穷大(inf=0x3f3f3f3f);
(3)最后输出的判断,看下面代码的处的注释;
AC代码:
#include<stdio.h> #include<string.h> #define inf 0x3f3f3f3f int dp[10005],c[505],w[505]; int V; void CompletePack(int c,int w) { int v; for(v=c;v<=V;v++) if(dp[v]>dp[v-c]+w) dp[v]=dp[v-c]+w; } int main() { int T; int E,F; int n; int i; scanf("%d",&T); while(T--) { scanf("%d%d",&E,&F); scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&w[i],&c[i]); V=F-E; memset(dp,inf,sizeof(dp)); dp[0]=0; for(i=1;i<=n;i++) CompletePack(c[i],w[i]); if(dp[V]==inf)printf("This is impossible.\n");/*当dp[V]=inf时,表明无法将物品组合起来装满背包,其值仍然为初始值*/ else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[V]); } return 0; }
相关文章推荐
- HDU-1114 Piggy-Bank(完全背包问题)
- HDU 1114 Piggy-Bank (dp问题之完全背包问题)
- 【HDU 1114】Piggy-Bank(dp||完全背包问题)
- HDU 1114 Piggy-Bank(完全背包问题)【完全背包--刚好装满 模板】
- 01背包及完全背包问题(51Nod - 1085,HDU 1114 Piggy-Bank)
- POJ 1384 && HDU 1114 Piggy-Bank(完全背包问题)
- hdu 1114 Piggy-Bank(完全背包问题)
- HDU 1114 Piggy-Bank(完全背包问题)
- hdu 1114 Piggy-Bank 完全背包问题
- hdu 1114 Piggy-Bank(完全背包)
- HDU 1114 Piggy-Bank(完全背包)
- Piggy-Bank(hdu-1114)(完全背包)
- hdu 1114 Piggy-Bank (完全背包+背包放满)
- hdu1114 — Piggy-Bank (完全背包)
- HDU 1114 Piggy-Bank(完全背包)
- HDU 1114---Piggy-Bank【一维完全背包】
- HDU 1114 - Piggy-Bank(完全背包)
- hdu 1114 Piggy-Bank -- 完全背包
- HDU 1114 Piggy-Bank(完全背包模板题)
- HDU 1114 Piggy-Bank(dp完全背包)