最优装载,算法问题。

youou008 2011-12-04 03:58:37
算法描述:
有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。


//x表示箱子是否装0--不装 1-装
//w表示箱子重量
//c表示船的载重量
//n表箱子个数
void Loading(int x[], Type w[], Type c, int n)
{
int *t = new int [n+1];
Sort(w, t, n);
for (int i = 1; i <= n; i++)
x[i] = 0;
for (int i = 1; i <= n && w[t[i]] <= c; i++)
{
x[t[i]] = 1;
c -= w[t[i]];
}
}

这是在书上的解法,采用重量最轻者先装的贪心选择策略,可产生最优装载问题的最优解。
但我觉得这样貌似行不通吧。

如果我有3个箱子,重量分别是1,10,11
船的装载量为10,那么用这个算法不就只能装重量为1的箱子了吗。
...全文
393 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chaoliu1024 2011-12-04
  • 打赏
  • 举报
回复
和0/1背包问题很类似。用动态规划或回溯法都能很好的求出解
youou008 2011-12-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mstlq 的回复:]
尽可能多的集装箱
没问题,楼主的例子当中,最多只能装一个箱子……
算法让你装重量为1的那个,没错

这个算法不能求出所有解,但他能保证没有别的解比他求出来的更好……


请记住题目的目标是箱子数最多,而不是装进去的重量最大
[/Quote]

谢谢你的回答,
原来的求的是箱子数目
明白了。
mstlq 2011-12-04
  • 打赏
  • 举报
回复
尽可能多的集装箱
没问题,楼主的例子当中,最多只能装一个箱子……
算法让你装重量为1的那个,没错

这个算法不能求出所有解,但他能保证没有别的解比他求出来的更好……


请记住题目的目标是箱子数最多,而不是装进去的重量最大

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧