Poj 1384 & Hdu 1114 Piggy-Bank (完全背包)
2013-02-24 20:51
411 查看
题目链接:http://poj.org/problem?id=1384
题意:给你一个储蓄罐空的和满的重量E、F,然后给出各种硬币的价值P和对应的重量W,要你估计出储蓄罐里面硬币价值和最小为多少,注意要保证重量和恰好为给出满的重量。1<=N<=500,1 <= E <= F <= 10000。
思路:完全背包,因为是求最小值且必须装满,故f[0]初始化为0,数组其他部分为正无穷。
注意正无穷不要习惯性写成0x7fffffff,代码中标记处执行加运算后会变负数。
题意:给你一个储蓄罐空的和满的重量E、F,然后给出各种硬币的价值P和对应的重量W,要你估计出储蓄罐里面硬币价值和最小为多少,注意要保证重量和恰好为给出满的重量。1<=N<=500,1 <= E <= F <= 10000。
思路:完全背包,因为是求最小值且必须装满,故f[0]初始化为0,数组其他部分为正无穷。
注意正无穷不要习惯性写成0x7fffffff,代码中标记处执行加运算后会变负数。
#include <cstdio> #include <cstring> #define min(x,y) ((x)<(y)?(x):(y)) struct Point { int p,w; void get () { scanf("%d%d",&p,&w); } }p[505]; const int INF=0x0fffffff; int f[10010]; int E,F,n; void CompletePack () { int i; for (i=0;i<=F-E;i++) f[i]=INF; f[0]=0; for (i=1;i<=n;i++) for (int j=p[i].w;j<=F-E;j++) f[j] = min(f[j],f[j-p[i].w]+p[i].p); //见题解 } int main () { int T; scanf("%d",&T); while (T--) { scanf("%d%d%d",&E,&F,&n); for (int i=1;i<=n;i++) p[i].get(); CompletePack (); if (f[F-E] == INF) printf("This is impossible.\n"); else printf("The minimum amount of money in the piggy-bank is %d.\n",f[F-E]); } return 0; }
相关文章推荐
- POJ 1384 && HDU 1114 Piggy-Bank(完全背包问题)
- poj 1384 && hdu 1114 Piggy-Bank (完全背包)
- 背包(1)poj 1384||hdu 1114 Piggy-bank --- 完全背包
- hdu 1114 Piggy-Bank ----->完全背包
- poj 1384 & zoj 2014 Piggy-Bank(完全背包)
- 【HDU 1114 & POJ 1384】 完全背包(注意技巧)
- Piggy-Bank(POJ-1384 && HDU-1114)
- [完全背包]HOJ 1031&HDU 1114 Piggy-Bank
- POJ 1384 Piggy-Bank 完全背包
- Piggy-Bank----HDU_1114----完全背包(变式)
- HDU-1114-Piggy-Bank(变态完全背包)
- POJ 1384 Piggy-Bank (完全背包)
- HDU 1114 Piggy-Bank (完全背包)
- hdu 1114 Piggy-Bank(完全背包)
- hdu 1114 Piggy-Bank 完全背包
- [ACM] hdu 1114 Piggy-Bank(完全背包)
- HDU 1114 Piggy-Bank 【完全背包】
- poj 1384 Piggy-Bank (完全背包)
- hdu 1114 Piggy-Bank 完全背包问题
- HDU 1114 Piggy-Bank(完全背包动态规划+变形)