/*<br /> 完全背包,且是恰好裝滿,求最小价值,初值 dp[0]=0,dp[i]=Max( 1<=i<=W )<br /> 狀態轉移方程 dp[j]=min(dp[j],dp[j-we[i]]+va[i]) 最後只要dp[W]!=Max 就有最優解! </p><p> */<br />import java.io.*;<br />import java.util.*;</p><p>public class Main<br />{<br />public static void main(String[] args)<br />{<br /> Scanner cin = new Scanner(new BufferedInputStream(System.in));<br /> //Scanner cin = new Scanner(new BufferedInputStream(System.in));<br /> int t;<br /> t = cin.nextInt();<br />for(int k = 1; k <= t; k++)<br />{<br />int E, F;<br />int va[];<br />va = new int [1000005];<br />int we[];<br />we = new int [1000005];<br />E = cin.nextInt();<br />F = cin.nextInt();<br />int n;<br />n = cin.nextInt();<br />//int kk = 1;<br />for(int i = 1; i <= n; i++)<br />{<br />va[i] = cin.nextInt();<br />we[i] = cin.nextInt();<br />/*<br />int p, w;<br />p = cin.nextInt();<br />w = cin.nextInt();<br />for(int j = 1; j < (F - E)/ w; j++)<br />{<br />va[kk] = p;<br />we[kk] = w;<br />}<br />*/<br />}<br />int dp[];<br />dp = new int[1000005];<br />dp[0] = 0;<br />for(int i = 1; i < 1000005; i++)<br />dp[i] = 0x1fffffff;<br />//System.out.println(dp[4]);<br />for(int i = 1; i <= n; i++)<br />for(int j = we[i]; j <= F - E; j++)<br />{<br />if(dp[j] > dp[j - we[i]] + va[i])<br />dp[j] = dp[j - we[i]] + va[i];<br />//System.out.println(dp[j]);<br />}<br />if(dp[F - E] < 0x1fffffff)<br />System.out.println("The minimum amount of money in the piggy-bank is " + dp[F - E] + ".");<br />else<br />System.out.println("This is impossible.");</p><p>}<br />}<br />}