题目:
链接:点击打开链接
题意:
知道存钱罐的质量和装满硬币的存钱罐的质量,然后是不同硬币的价值和质量,求出存钱罐里钱币的最小价值。
算法:
完全背包问题,银币的个数是不限的。
思路:
状态转移方程:j = 0时,价值为0
dp[j] = min(dp[j],dp[j-w[i]]+v[i]);//表示质量为j的钱币,含有的最小的价值
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define INF 10000000 int dp[10010],w[555],v[555]; int e,f; int main() { //freopen("input.txt","r",stdin); int t,coinw,n; cin>>t; while(t--) { cin>>e>>f; coinw = f-e; cin>>n; for(int i=0; i<=coinw; i++) dp[i] = INF; dp[0] = 0; for(int i=0; i<n; i++) { cin>>v[i]>>w[i]; } for(int i=0; i<n; i++) { for(int j=w[i]; j<=coinw; j++) { dp[j] = min(dp[j],dp[j-w[i]]+v[i]); } } if(dp[coinw] == INF) printf("This is impossible.\n"); else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[coinw]); } return 0; }
hdu 1114 Piggy-Bank,布布扣,bubuko.com
原文地址:http://blog.csdn.net/u013147615/article/details/25952659