借助结构体、从小到大迭代背包。(完全背包)。代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define ms(x, y) memset(x, y, sizeof(x))
const double PI = acos(-1.0), eps = 1e-8;
const int Max = 10010;
struct node {
int value;
int volum;
}a[Max];
int f[Max];
int main() {
int i,j,V,t,n;
int e,h;
scanf("%d",&t);
while(t--) {
scanf("%d%d",&e,&h);
memset(f,INF,sizeof(f));
V=h-e;
cin>>n;
f[0] = 0;
for(i = 0;i < n; i ++) {
scanf("%d%d",&a[i].value,&a[i].volum);
for(j = a[i].volum; j<=V; j++) // 完全背包从小到大
f[j]=min(f[j], f[j-a[i].volum] + a[i].value);
}
if(f[V]!=INF)
printf("The minimum amount of money in the piggy-bank is %d.\n",f[V]);
else
printf("This is impossible.\n");
}
return 0;
}