算法题:装备合成

你有一些合成元素对象,按指定数量的类型的合成元素可以合成一些装备,合成时候会有一些费用,合成的装备可以卖出,合成元素本身可以卖出。合成一个装备后,剩余元素个数只要还够合成,可以继续合成,也可以选择不合成。

要求所有东西卖出后收入最大化。

一个现实业务精简来的问题,背包、规划或自己的思路都可以。你试一试吧。

posted @ 2010-09-28 16:40 heros 阅读(85) 评论(4) 编辑 收藏

 回复 引用 查看   
#1楼2010-09-28 17:15 | 泥冰      
1.确定可合成装备; 把 合成装备的价小于 所需元素本身价的组合去掉.(解决"可以继续合成,也可以选择不合成")。
2.通过第一步操作,我除了得到可合成装备组,顺便可以得到一个 卖价/成本 这样一个组数据。对这组数据进行从大到小排序。
然后循环。当现有元满足时,进行合成。
退出循环 ,卖出装备 和 剩余元素

 回复 引用 查看   
#2楼[楼主]2010-09-29 17:22 | heros      
@泥冰
第一步的思路没有问题,但并不能解决"可以继续合成,也可以选择不合成"。因为我们这个问题中,各种装备显然会互相影响,是否继续再合成同种装备,无法从这个装备本身的条件来获取。
第二步不正确,这个问题必须从整体来看,虽然你考虑到用价格/成本比并对数据做排序,从大到小,但这样还只是贪心的做法。
比如,你有四个元素,有两种装备可以合成
A:消耗3个元素 ,B:消耗2个元素 ,A的价格/成本比可能比较高,但是造成一个元素无法继续参加合成,这就可能造成平均价格/成本反而是低于参加两个B的合成。我这个例子只假设到了个数,但实际情况可能还有元素类别,参加一部分之后,可能造成其它的无法参加。

 回复 引用 查看   
#3楼2010-10-08 15:40 | 泥冰      
@heros
楼主所说的这种情形我当时确实没有考虑到。不知道楼主有没有最优解?
我认为如果是最大遍历可能情形,然后取最优解。那也就失去了研究算法的意义

 回复 引用 查看   
#4楼[楼主]2010-10-09 09:51 | heros      
@泥冰
实际的需求比这个复杂一些,我实现时用的是已经存在的动态规划算法。我很想集广众的思想来找一个更好的方法。因为选优问题,随着数量的增多,性能是个大问题。