#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100000;
int t,e,g,n;
int p[505],w[505];
int f[maxn];
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&e,&g);
int W=g-e;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&p[i],&w[i]);
}
for(int i=0;i<=W;i++)
f[i]=1000000;
f[0]=0;
for(int i=0;i<n;i++)
{
for(int v=w[i];v<=W;v++)
{
f[v]=min(f[v],f[v-w[i]]+p[i]);
}
}
if(f[W]==1000000)
printf("This is impossible.\n");
else
printf("The minimum amount of money in the piggy-bank is %d.\n",f[W]);
}
return 0;
}
这个题目还是可以的,,毕竟是背包问题啊,一个基础的DP啊,我通过这个还是学到了很多的,开始看了背包九讲,特别是在讲背包这个问题解决代码的优化的时候,还是非常厉害的啊
那个对于空间的优化,真的是很流弊的啊,可能有时候回碰到题目 就是来卡那个内存的吧。(新手小白的内心揣测),然后还是学到了很多的了,需要继续把背包九讲慢慢的磨完啊。