经典背包,不用题解了,直接上代码吧
#include<stdio.h> int min(int x,int y) { if(x>y) return y; else return x; } int main() { int t,n,v,x,y,i,j; int f[10001],p[501],w[501]; scanf("%d",&t); while(t--) { scanf("%d%d",&x,&y); v=y-x; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&p[i],&w[i]); f[0]=0; for(i=1;i<=v;i++) f[i]=9999999; for(i=1;i<=n;i++) for(j=w[i];j<=v;j++) f[j]=min(f[j],f[j-w[i]]+p[i]); if(f[v]==9999999) printf("This is impossible.\n"); else printf("The minimum amount of money in the piggy-bank is %d.\n",f[v]); } return 0; }