题目:http://acm.hdu.edu.cn/showproblem.php?pid=1114
完全背包求最小,背包九讲就是好。
#define min(a,b) ( (a) > (b) ? (b) : (a) )
#define oo 1000000000
#include<stdio.h>
int dp[10005];
int main()
{
int n,i,j,v,w,t,e,f,m;
// freopen("a.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&e,&f);
m = f - e;
scanf("%d",&n);
for(j=1;j<=10005;j++)
dp[j] = oo;
dp[0] = 0;
for(i=0;i<n;i++)
{
scanf("%d%d",&v,&w);
for(j=w;j<=m;j++)
dp[j] = min ( dp[j],dp[j-w] + v );
}
if(dp[m] == oo)
puts("This is impossible.");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]);
}
return 0;
}