#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 发布
本文介绍了一段使用C++编程语言解决特定数学问题的代码。通过利用标准库中的函数,作者展示了如何高效地进行复杂的数值计算。文章详细解释了代码的功能、实现过程以及优化策略,对于学习C++编程和数值计算的读者极具参考价值。

305

被折叠的 条评论
为什么被折叠?



