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;
}
posted @ 2012-08-31 09:50  Yogurt Shen  阅读(120)  评论(0编辑  收藏  举报