1 //01背包 求背包内物品价值超过某一定值时的最小体积
2 #include<bits/stdc++.h>
3 using namespace std;
4 const int maxv=10005;
5 const int maxn=10005;
6 int n,v_tot,w_tot,v[maxn],w[maxn],f[maxv],sumv,bound;
7 int main()
8 {
9 scanf("%d%d%d",&w_tot,&n,&v_tot);
10 for(int i=1;i<=n;++i) scanf("%d%d",&w[i],&v[i]);
11 for(int i=1;i<=n;++i)
12 for(int j=v_tot;j>=v[i];--j)
13 f[j]=max(f[j],f[j-v[i]]+w[i]);
14 if(f[v_tot]<w_tot) {printf("Impossible");return 0;}//若达到背包最大体积价值都不够则无解
15 for(int i=1;i<=v_tot;++i)//否则枚举体积 刚超过规定价值的体积即为所求
16 if(f[i]>=w_tot) {printf("%d",v_tot-i);return 0;}
17 }