POJ3268-Bookshelf 2
http://poj.org/problem?id=3628
#include<cstdio> using namespace std; const int mm=20000000; bool dp[mm]; int h[22],i,j,k,n,b,m; int main(void) { while(scanf("%d%d",&n,&b)!=EOF) { m=0; for(i=0;i<n;i++) { scanf("%d",&h[i]); m+=h[i]; } for(i=0;i<=m;i++) dp[i]=0; dp[0]=1; for(i=0;i<n;i++) for(j=m-h[i];j>=0;j--) if(dp[j]) dp[j+h[i]]=1; for(i=b;i<=m;i++) if(dp[i]) break; printf("%d\n",i-b); } return 0; }