#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
long long w[1100],c,ans,sum[1100];
int n;
void dfs(int order,long long left)
{
if(left<=0)
return;
if(order==1)
{
if(left>w[1])
{
left=left-w[1];
}
ans=min(ans,left);
return;
}
if(left>sum[order])
{
ans=min(ans,left-sum[order]);
return;
}
dfs(order-1,left);
dfs(order-1,left-w[order]);
}
int main()
{
scanf("%d%I64d",&n,&c);
for(int i=1;i<=n;i++)
{
scanf("%I64d",&w[i]);
sum[i]=sum[i-1]+w[i];
}
if(sum[1]>c)
{
printf("0\n");
return 0;
}
int i;
for(i=n;i>=1;i--)
{
if(c>=w[i])break;
}
ans=200000000;
dfs(i,c);
printf("%I64d\n",c-ans);
return 0;
}
poj3172 搜索01背包
最新推荐文章于 2019-08-23 09:39:25 发布