#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int w[1005];
int n,c,best=0,cw=0,r=0;
void func(int i)
{
if (i > n)
{
if (cw>best)
{
best = cw;
}
return;
}
if ((cw + w[i]) <= c&&cw+r>best)
{
cw += w[i];
r -= w[i];
func(i + 1);
cw -= w[i];
r += w[i];
}
r -=w[i];
func(i + 1);
}
int main()
{
cin >> n>>c;
for (int i = 1; i <= n; i++)
{
cin >> w[i];
r += w[i];
}
func(1);
cout << best<< endl;;
return 0;
}
最优装载问题回溯法
最新推荐文章于 2023-11-07 19:50:00 发布