http://acm.hdu.edu.cn/showproblem.php?pid=1114
题意:完全背包,每种物品都有无穷多件,问恰好装满背包所放物品的最少价值。
注意:题目要求恰好装满背包,初始化时,dp[0] = 0。要求最小价值,其余dp[i] = INF 。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
int c[510],w[510],dp[10010];
int main()
{
int test;
scanf("%d",&test);
while(test--)
{
int v,f,e,m;
scanf("%d %d",&f,&e);
v = e-f;
scanf("%d",&m);
for(int i = 1; i <= m; i++)
scanf("%d %d",&w[i],&c[i]);
dp[0] = 0;
for(int i = 1; i <= v; i++)
dp[i] = INF;
for(int i = 1; i <= m; i++)
{
for(int j = c[i]; j <= v; j++)
dp[j] = min(dp[j], dp[j-c[i]]+w[i]);
}
if(dp[v] == INF)
printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[v]);
}
return 0;
}