/* hdu 1114 題目大概意思是把錢存在一個存錢罐裡面 給出空存錢罐的重量和裝錢後存錢罐的重量, 給出幾種貨幣的價值和重量,問你在不超過重量的情況下,貨幣價值的最小值 實際上就是一個背包問題,類似那個硬幣問題 用dp[i]表示需要湊足重量i需要的最少貨幣價值 在DAG圖上可以表示為確定起點DP[s]和終點dp[0],求最短路徑 dp[0]為0; */#include <cstdio>#include <iostream>#include <algorithm>#define maxn 10005#define INF 99999999using namespace std;int T;int e,f,n;int dp[maxn];int v[505];int w[505];int main(){ scanf("%d",&T); while(T--) { scanf("%d%d",&e,&f); scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d%d",&v[i],&w[i]); int S=f-e; for(int i=S; i>=0; i--) dp[i]=INF; dp[0]=0; for(int i=1; i<=S; i++) for(int j=1; j<=n; j++) {// printf("i:%d %d %d\n",i,w[j],dp[i]); if(i-w[j]>=0) {// cout<<"fs"<<endl; if(dp[i]>dp[i-w[j]]+v[j]) dp[i]=dp[i-w[j]]+v[j];// printf("i:%d %d %d\n",i,w[j],dp[i]);//// if(i==50) while(1){} } } if(dp[S]!=INF) printf("The minimum amount of money in the piggy-bank is %d.\n",dp[S]); else printf("This is impossible.\n"); }}