猪猪罐 | ||||||
|
||||||
Description | ||||||
ikki有一个小金库,这是一个猪猪罐,猪猪罐里面放了一些硬币。ikki知道了每种硬币的价值和重量,并且还知道空猪猪罐的重量,现在ikki想知道这个猪猪罐里至少放了价值为多少的硬币,她只能称出整个猪猪罐的总重量,你能帮她计算一下么? |
||||||
Input | ||||||
多组测试数据,第一行给出一个整数T表示测试数据的组数。 对于每组数据: 第一行输入两个正整数E、V,其中E表示空猪猪罐的重量,V表示放了硬币之后猪猪罐的总重量。(1<=E<=V<=10000) 第二行输入一个整数N表示硬币的种数。(1<=N<=50) 接下来的N行,每行两个整数v,w分别表示每种硬币的价值和重量。(1<=v<=50000,1<=w<=10000) |
||||||
Output | ||||||
对于每组数据输出猪猪罐中硬币价值可能的最小值,如果不存在则输出”Impossible”。 每组输出占一行。 |
||||||
Sample Input | ||||||
3 10 110 2 1 1 30 50 10 110 2 1 1 50 30 1 6 2 10 3 20 4 |
||||||
Sample Output | ||||||
60 100 Impossible |
||||||
Author | ||||||
周洲@hrbust |
Submit | Statistic | Discuss | Sharedcodes
|
#pragma warning(disable:4786)//使命名长度不受限制 #pragma comment(linker, "/STACK:102400000,102400000")//手工开栈 #include <map> #include <set> #include <queue> #include <cmath> #include <stack> #include <cctype> #include <cstdio> #include <cstring> #include <stdlib.h> #include <iostream> #include <algorithm> #define rd(x) scanf("%d",&x) #define rd2(x,y) scanf("%d%d",&x,&y) #define rds(x) scanf("%s",x) #define rdc(x) scanf("%c",&x) #define ll long long int #define maxn 5000105 #define mod 1000000007 #define INF 0x3f3f3f3f //int 最大值 #define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;++i) #define MT(x,i) memset(x,i,sizeof(x)) #define PI acos(-1.0) #define E exp(1) using namespace std; int a[maxn],b[maxn],dp[maxn],n,v,loop,x,y; int main(){ rd(loop); while(loop--){ rd2(x,y);v=y-x;rd(n); FOR(i,1,n)rd2(a[i],b[i]); FOR(i,1,v)dp[i]=INF; FOR(i,1,n)for(int j=b[i];j<=v;++j) dp[j]=min(dp[j],dp[j-b[i]]+a[i]); if(dp[v]==INF)printf("Impossible\n"); else printf("%d\n",dp[v]); } return 0; } /* 3 10 110 2 1 1 30 50 10 110 2 1 1 50 30 1 6 2 10 3 20 4 */