完全背包简单题.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define inf (1 << 30)
using namespace std;
const int maxn = 10000;
int dp[maxn];
int val[510],weit[510];
int main()
{
int cas;
scanf("%d",&cas);
while(cas--){
int E,F,total;
scanf("%d %d",&E,&F);
total = F - E;
int n;
scanf("%d",&n);
for(int i=1; i<=n; ++i)
scanf("%d %d",&val[i],&weit[i]);
dp[0] = 0;
for(int i=1; i<=total; ++i)
dp[i] = inf;
for(int i=1; i<=n; ++i)
for(int j=weit[i]; j<=total; ++j)
dp[j] = min(dp[j],dp[j-weit[i]]+val[i]);
if(dp[total] == inf) printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[total]);
}
return 0;
}