|
![]() | 作者: kert_t8 [kert_t8]
![]() |
登录 |
有一个背包可以装下质量为M的物体,现在有物品序列{a1,a2,a3,...,an},序列中的an表示物品的质量。问怎样的装发可以让背包装下最多的东西?(学校竞赛题之一,竞赛已结束) 穷尽全部的装法然后判断选择当然可以,因为n是有限的,但是这个算法低效(我觉得) 谁能想到比较好的算法,给我一个行吗?期待啊.... |
地主 发表时间: 03-12-24 22:31 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
没有人?呜呜~~ |
B1层 发表时间: 03-12-31 10:23 |
![]() | 回复: 286 [unique] ![]() |
登录 |
最多的东西指个数最多?还是总质量最多? 穷举法有什么不好的?其它方法也多是穷举法的优化或变种. |
B2层 发表时间: 03-12-31 12:21 |
![]() | 回复: kert_t8 [kert_t8] ![]() |
登录 |
最多是指总质量最大 除了穷举法就没有别的什么可以通过逻辑判断的方法来判断如何装入物品了吗? 比如说我曾经想了一个方法 1,将物品A{a1,a2,a3,.....}全部按质量排序,成为序列B{b1,b2,b3,...} 2,比较b1与b2+b3+b4+...+bn的值,将较大的放入Max,较小的放Min 3,测试Max是否小于背包仍然剩余的负载,若小于则将Max放入背包Bag{Bag1,Bag2,....},转5,否则继续 4,测试Min是否小于背包仍然剩余的负载,若小于则将Min放入背包,转6,否则转7 5,测试Max是否为b2+b3+b4...,是则输出背包Bag然后退出程序,否则转7 6,测试Min是否为b2+b3+b4...,是则输出背包Bag然后退出程序,否则转7 7,令b1=b2,b2=b3,b3=b4....,转2 当然,3分钟之后我就证明了自己的算法是有问题的,但是我的意思就是可不可以找到一个类似这种方法的,一步一步判断下一步应该装入哪个物品的算法。我刚刚考完数据结构和离散数学,感觉这个程序跟图论里面的最短路径之类的有关系(不晓得是不是哈),但是我又搞不清楚具体如何去构建这个模型,所以来请教一下,请不吝赐教哈 还有,穷举法都有一些什么优化和变种的方式呢,可不可以列举一二啊? 谢谢 |
B3层 发表时间: 04-01-02 18:37 |
![]() | 回复: listenwind [listenwind] ![]() |
登录 |
up ! I want to known it too ! |
B4层 发表时间: 05-02-06 06:59 |
![]() | 回复: SysHu0teR [syshunter] ![]() |
登录 |
跟那个典型的背包算法有点象,刚从CHINAUNIX论坛上找的:代码: |
B5层 发表时间: 05-02-06 12:25 |
![]() | 回复: mumin [cnmumin] ![]() |
登录 |
....现在太迟了,早上再来我 |
B6层 发表时间: 05-02-08 04:30 |
![]() | 回复: mumin [cnmumin] ![]() |
登录 |
....现在太迟了,早上再来我 |
B7层 发表时间: 05-02-08 04:41 |
![]() | 回复: jaychou [jaychou] ![]() |
登录 |
我不太明白题目的意思,都装进去不就完了??哪有什么最多最少?![]() |
B8层 发表时间: 05-02-14 02:48 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号