请帮助解决以下编码任务(不需要确切的代码,只需要提示如何解决问题)。
你有一辆卡车,你需要使用这辆卡车转移货物。每种商品都有一个重量(公斤),一个装载卡车所需的时间(以分钟为单位)和一个价值。每件商品只能装在卡车上一次。有一个可用商品的例子(ID,重量,时间,价值)
0,82,10,300
1,99,22,400
2,2,34,650
3,22,5,92
4,33,31,13
5,99,49,59
等等。 卡车的最大载荷为1000千克。您只有60分钟的时间将货物装入卡车,您需要装载最大价值。货物的空间不计算。您需要找到应装入卡车的货物ID。
我应该使用什么方法?
答案 0 :(得分:0)
警告:在继续阅读之前,我并非100%确定这将永远返回 正确的结果。但至少在我试过的3次测试中它似乎有效 对。这更像是对最优结果的近似,而不是可以改变的实际算法。
我将数据存储在excel中,因为我发现它最容易显示我正在使用的数据/步骤,并且因为excel已经有一些内置函数,例如AVERAGE
和{{1}所以欢呼,少给我编码! (通常,excel已经为这些任务做好了准备)
然后我们计算RANK
&系数Worth / Time
。
然后我们计算出来的东西的“可能性”,这是计算系数之前的两个Worth / Weight
^
之后,我们AVERAGE
这3个类别中的每个项目。其中1是最高等级(列中最高值),6是最低等级(列中最低值) - 这相当于编程中的排序算法,例如RANK
是可以使用的,如果你没有排名优秀的功能,你可以使用。
我们再做了quicksort()
我们所做的所有个人排名(所以平均时间等级,重量等级和可能性排名)
我们AVERAGE
(或编程术语RANK
)我们上次创建的总平均值
现在我们可以从实际算法开始... 我们quicksort()
将已排序的项目列表放入一个数组中(按其总排名从最佳(1)到最糟糕的(6)。
我们在整个array.push()
中进行迭代 - 看起来像array.length
我们将个别排名的项目添加到我们的列表中。我们有两个for (i=0; i <= array.length; i++)
语句,如果IF
Continue
循环(跳过项目)
如果没问题(if条件不会触发),请将我们的项目添加到一堆已保存的项目中
循环(直到我们遍历数组中的所有项目。)
现在,我明白了。这是很多步骤,当你这样读它时听起来真的很混乱。在这里它是可视化的,其中标记为RED的项目是if条件触发的位置。我觉得它对可视化有很大帮助。
所以使用原始数据表:
我们一步一步地执行以下操作
我测试过的其他数据范围:
可能有其他更简单的方法来实现这一点,但至少我 想不到一个,这似乎有效。希望这适合你!
答案 1 :(得分:-1)
考虑到你想要将最大值加载到卡车中,我会根据它们(值/(时间*重量))因子来判断矢量中的项目,然后从矢量顶部选择元素,判断为上述因素,同时也试图在给定时间内使卡车达到最大容量。