http://poj.org/problem?id=3628
01背包
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define maxn 21
#define ll long long
using namespace std; ll h[maxn];
int n;
ll b;
ll dp[];
ll max1(ll a,ll b)
{
return a>b?a:b;
} int main()
{
while(scanf("%d%lld",&n,&b)!=EOF)
{
ll v=;
for(int i=; i<=n; i++)
{
scanf("%lld",&h[i]);
v+=h[i];
}
for(int i=; i<=n; i++)
{
for(ll j=v; j>=h[i]; j--)
{
dp[j]=max(dp[j-h[i]]+h[i],dp[j]);
}
}
for(ll j=; j<=v; j++)
{
if(dp[j]>=b)
{
printf("%lld\n",dp[j]-b);
break;
}
}
}
return ;
}