问题描述:
有一批共n 个集装箱要装上艘载重量为c 的轮船,其中集装箱i 的重量为wi。找出一种最优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装上轮船。
#includeusing 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("%dn",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< 如果找到一组解正好等于最大载荷,无需继续寻找(继续找还很有可能超时)
回溯的时候除了将判断用的f恢复1,还要把重量的和减去当前加上的重量
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)