码迷,mamicode.com
首页 > 其他好文 > 详细

背包问题

时间:2015-07-22 01:33:29      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

题目和其他参考:

对于不同物品的价格和不同物品的重要程度,心里有个权重,但是总价值不能超过ValueMax(最大容量,也就是背包问题中的容纳最大重量)。
现在有五件物品,总价值不能超过1000元。这五件物品的的单价和对应的重要程度的关系是:
800--2
400--5
300--5
400--3
200--2
问题是怎么在总价值的范围内买到最重要的物品,也就是多个物品的价格和重要程度的乘积的最大值。
由于每个物品的价格的不确定性,需要遍历在总价值范围内对应的每个权重值。
对于第一个物品填的时候没有问题。
在放第二个的时候,先要计算1000-400这个位置对应的值,然后加上第二个物品计算的权重值就是这个位置(价格)当前的权重值,然后和上一时刻存放在这个位置的值进行比较,将更新较大值在这个位置上。之后雷同。
具体地:
当遍历到第三个的时候:
1000-300 = 700->400*5=2000
(肯定能)塞进:2000+300*5 = 3500
更新(1000位置对应值)(通过判断当前值和上一时刻值的大小,保存较大值)
999-300 = 699->2000
(肯定能)塞进:2000+300*5 = 3500
更新(999位置对应值)(通过判断当前值和上一时刻值的大小,保存较大值)
。。。
300 -300 = 0->0
(肯定能)塞进:2000+300*5 = 3500
更新(300位置对应值)(通过判断当前值和上一时刻值的大小,保存较大值)
然后遍历第四个:
1000-400 = 600->x
x+400*3
更新(1000位置对应值)(通过判断当前值和上一时刻值的大小,保存较大值)
。。。。
===============================
代码设计思路:
for 1-5
    for 1000 - 当前物品的价格
        计算该遍历值对应权重值加上外循环对应的第几个物品乘以权重值
        判断计算的值和存放在遍历值对应的权重值,保存较大值
================================






背包问题

标签:

原文地址:http://www.cnblogs.com/ArronXing/p/4666121.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!