完全背包
for
i=[0,n)
for
(j=weight[i]; j<=total; j++)
tab[j] = max(tab[j-weight[i]]+value[i],tab[j])
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
int dp[100005];
int val[550],weight[550];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int wa,wm;
scanf("%d%d",&wa,&wm);
int w=wm-wa;
int m;
scanf("%d",&m);
for(int i=0;i<m;++i)
{
scanf("%d%d",&val[i],&weight[i]);
}
for(int i=0;i<=w;++i)
{
dp[i]=INF;
}
dp[0]=0;
for(int i=0;i<m;++i)
{
for(int j=weight[i];j<=w;++j)
{
dp[j]=min(dp[j],dp[j-weight[i]]+val[i]);
}
}
if(dp[w]==INF)
{
puts("This is impossible.");
}
else
{
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[w]);
}
}
return 0;
}