洛谷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 }