洛谷P1510 精卫填海

 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 }

 

posted @ 2019-01-24 13:11  宇興  阅读(166)  评论(0编辑  收藏  举报