任何人都可以帮我解决这个问题吗?
"一名徒步旅行者希望在一段时间内参加巡演。该路线包括几个休息的地方。 徒步旅行者如何选择他的停留点,即每日最大距离尽可能低?"
示例:3天内59公里,包括6个可能的休息区
开始 - (11公里) - >休息(1) - (16公里) - >休息(2) - (5 km) - >休息(3) - (5 km) - >休息(4) - (12公里) - >休息(5) - (10公里) - >目的地(6)
解决方案:
第1天:11公里
第2天:26公里
第3天:22公里
答案 0 :(得分:1)
正如@MrCoder在合作中指出的那样,这似乎是旅行商的问题。
此问题有自己的维基百科文章Here.
基本的想法是你保持每个站点的总距离从a点开始,但要到达c点你必须转到b点,所以从a点到c点的总距离是距离a的距离。到b加b到c。然后,对于具有从a点行进的最小距离的点执行此操作,并对从该点可到达的所有点重复此操作,直到达到该范围内的所有点,然后包括所有停靠点的最小距离以及应该使用的路径取得了
现在找到了点之间的最短距离,我们可以找到当天之间的最短距离。
为了找到这个,我们如果我们正在寻找n天,我们假设天数将停留在前n-1个元素。我们采取每天的总距离,只查看最后一天。如果最后一天的距离大于前一天,我们假设我们可以使距离更小,一旦最后一天的距离变得小于前一天的距离,我们就会移动到下一个数字。如果在任何时候,一天只有一个距离停在该集合上,那么你当天就不能再往前走了。
所以让我们以你的例子为例,距离为11-16-5-5-12-10,寻找三天 所以划分天数如下所示
11 | 16 | 5-5-12-10 gives a total distance traveled each day of 11 | 16 | 32 since 16< 32 we do
11 | 16-5 | 5-12-10 gives 11|21|27 21 < 27 so
11 | 16-5-5 |12-10 give 11|26|22 ok we have now found day 3
for day 2 11 < 26 but adding 11 to day two would put day 1 at 0 distance so we cannot move it from day 1
如果第2天会转到0元素,这也会成立
示例2
8 - 2 - 16 - 6 - 6
8 | 2 | 16 - 6 - 6 yields 8-2-28 2 < 28
8 | 2 - 16 | 6 - 6 yields 8-18-12 18 > 12 day 3 found
8 - 2 | 16 | 6 - 6 yields 10 - 16 - 12 day 2 has one element day 2 found
day 1 found