请帮助解决以下编码任务(不需要确切的代码,只需要一个如何解决问题的提示)。
你有一辆卡车,你需要用这辆卡车运送货物。每件货物都有重量(以公斤为单位)、将货物装入卡车所需的时间(以分钟为单位)和价值。每件货物只能装在卡车上一次。有一个可用商品的示例(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。
我应该使用什么方法?
发布于 2018-06-11 23:34:43
警告:在您继续阅读之前,我不能百分之百确定这将始终返回正确的结果。但至少在我运行的3个测试中,它似乎工作正常。这更接近于最优结果,而不是可反驳的实际算法。
我将我的数据存储在excel中,因为我发现显示我正在处理的数据/步骤是最容易的,也因为excel已经有一些内置的函数,如AVERAGE和RANK,所以万岁,为我编写的代码更少!(一般来说,excel可以很好地完成这类任务)

然后我们计算Worth / Time & Worth / Weight系数。
之前的两个系数的AVERAGE

RANK每一项。其中1是最高排名(列中的最高值),6是最低排名(列中的最低值)-这相当于编程中的排序算法,例如,如果您没有rank excel函数,则可以使用quicksort()。
AVERAGE (所以时间排名,权重排名和似然排名的平均值)RANK (或者在编程术语中是quicksort())我们最后一次创建的总平均值
我们可以从实际的算法开始...我们将排序的项目列表array.push()到一个数组中(根据他们的总排名从最佳(1)到最差(6)进行索引。
array.length -将类似于for (i=0; i <= array.length; i++)
IF语句,在这两个语句中,我们循环(跳过项目)如果我们选择exceed 100kg OR exceeds 60min
Continue ( if条件不触发),将项目添加到
现在,我明白了。这是很多步骤,当你像这样读它的时候,它听起来真的很混乱。在这里它是可视化的,其中标记为红色的项是触发if条件的地方。我觉得它对可视化有很大的帮助。
因此,使用我们的原始数据表:

我们一步一步地做以下工作

我测试的其他数据范围:




可能还有其他更简单的方法来实现这一点,但至少我想不到一个,这似乎是有效的。希望这对你有用!
发布于 2018-06-11 02:48:12
考虑到您想要将最大的价值装载到卡车中,我将根据它们的( while /( time * weigth ))因子对向量中的项目进行排序,并根据上面提到的因子从向量的顶部挑选元素,同时还试图在给定的时间内满足卡车的最大容量。
https://stackoverflow.com/questions/50786953
复制相似问题