问题描述:
有一批共n 个集装箱要装上艘载重量为c 的轮船,其中集装箱i 的重量为wi。找出一种最优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装上轮船。
#include<bits/stdc++.h>
using namespace std;
int n,c,a[201],i,m=-1;
bool f[201];
void fa(int s,int t)
{
int i;
if (s==c) {
printf("%d\n",s);
exit(0);
}
if (s>c) {
return;
}
if (s>m) m=s;
for (i=1; i<=n; i++)
if (f[i])
{
f[i]=false;
s+=a[i];
fa(s,t++);
s-=a[i];
f[i]=true;
}
}
int main()
{
cin>>n>>c;
for (int i=1; i<=n; ++i) scanf("%d",&a[i]);
for (int i=1;i<=n; ++i) f[i]=true;
fa(m,1);
cout<<m<<endl;
return 0;
}
如果找到一组解正好等于最大载荷,无需继续寻找(继续找还很有可能超时)
回溯的时候除了将判断用的f恢复1,还要把重量的和减去当前加上的重量