论坛: 编程破解 标题: 背包问题?请教 复制本贴地址    
作者: 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论坛上找的:
代码:

【问题】  背包问题
问题描述:有不同价值、不同重量的物品n件,求从这n件物品中选取一部分物品的选择方案,使选中物品的总重量不超过指定的限制重量,但选中物品的价值之和最大。
设n个物品的重量和价值分别存储于数组w[ ]和v[ ]中,限制重量为tw。考虑一个n元组(x0,x1,…,xn-1),其中xi=0 表示第i个物品没有选取,而xi=1则表示第i个物品被选取。显然这个n元组等价于一个选择方案。用枚举法解决背包问题,需要枚举所有的选取方案,而根据上述方法,我们只要枚举所有的n元组,就可以得到问题的解。
显然,每个分量取值为0或1的n元组的个数共为2n个。而每个n元组其实对应了一个长度为n的二进制数,且这些二进制数的取值范围为0~2n-1。因此,如果把0~2n-1分别转化为相应的二进制数,则可以得到我们所需要的2n个n元组。
【算法】
maxv=0;
for (i=0;i<2n;i++)
{  B[0..n-1]=0;
  把i转化为二进制数,存储于数组B中;
  temp_w=0;
  temp_v=0;
  for (j=0;j<n;j++)
  {  if (B[j]==1)
      {  temp_w=temp_w+w[j];
        temp_v=temp_v+v[j];
      }
      if ((temp_w<=tw)&&(temp_v>maxv))
      {  maxv=temp_v;
        保存该B数组;
      }
  }
}



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号