POJ 1384 Piggy-Bank (ZOJ 2014 Piggy-Bank) 完全背包
POJ :http://poj.org/problem?id=1384
ZOJ:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2014
题目大意:
给定一个猪的存钱罐,它的初始重量和装满的重量,给你n种货币(包括它们的重量和价值),要求求最坏情况下装满这个猪所能获得的钱
依旧是完全背包的问题。
只不过一开始只有什么都不装有合法解,其他均为无穷大,即一开始dp[0]=0
然后改为求min而不是max(题目要求最坏情况下)
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAXN=10000+10; const int INF=9999999; int dp[MAXN]; int p[512],w[512]; int main() { int T; scanf("%d",&T); while(T--) { int E,F; scanf("%d%d",&E,&F); int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&p[i],&w[i]); int value=F-E; for(int i=1;i<=value;i++) { dp[i]=INF; } dp[ 0 ]=0; for(int i=1;i<=n;i++) { for(int j=w[i];j<=value;j++) { dp[ j ]=min( dp[j] , dp[j - w[i] ]+p[i]); } } if(dp[value] !=INF) printf("The minimum amount of money in the piggy-bank is %d.\n",dp[value]); else printf("This is impossible.\n"); } }
新 blog : www.hrwhisper.me