我需要一些关于作业问题的帮助/指示。如果有人能指出我如何解决这个问题,我真的很感激。)
“一只名叫莫的愤怒的小鸟正在飞行一段漫长的旅程来报复 在猪身上。为了节省战斗的能量,这只鸟将采取 喷射流的优势将降低他的飞行能量 消费。在飞行之前,BirdHQ给了鸟一个输入文件 格式如下:
- 第一行只包含1个整数,这是在没有喷射流的情况下飞行1英里所需的恒定能量。
- 每个后续行包含3个以空格分隔的整数:喷射流的起始英里标记,喷射的结束英里标记 流,最后是一个整数,表示所需的总能量 飞得那喷射流的距离。
醇>例如,“3 7 12”线表示需要12个能量单位才能飞行 3英里到7英里之间的4英里。
请注意,喷射流可以重叠,但鸟不能超过 一次喷射一股喷射流,它不会飞出局部喷射流。
为简单起见,请考虑最远喷射的最终英里标记 流程结束了。
编写一个python程序,它接收一个输入文件“jetstreams.txt” 计划出Mo应该飞的最佳射流序列 在整个旅程中尽量减少他的能量消耗。所有 输入文件中的整数是非负数。作为输出,打印出来 最小总能量和表示喷射流的元组列表' 端点。
例如,给定样本jetstreams.txt,最小总能量 需要飞行所有24英里是352能量单位,并且是最佳的 喷射流序列是[(0,5),(6,11),(14,17),(19,24)]。“
50
0 5 10
1 3 5
3 7 12
6 11 20
14 17 8
19 24 14
21 22 2
这会像解决图表的最短路径吗?
答案 0 :(得分:4)
是
你有一个“根本不使用喷射流”路径,它由编号为0,1,3,5,6,7,11,14,17,19,21,22,24的顶点组成。连接这些顶点中的每一个的边缘具有50 *距离的“权重” - 因此0-> 1边缘被加权50,1-> 3边缘被加权100等等。
然后,你有另外的边代表喷气流 - 一个来自0-> 5加权10,一个来自1-> 3加权5等等。
这些形成了有向无环图(DAG)。
现在你可以使用通常的图遍历技术来找到从顶点0到顶点24的“最便宜”的路线。
答案 1 :(得分:2)
是的,这是一个最短的路径问题,能量代替每条边的长度。在构建样本问题图时,从0到24的直线开始,每英里50个能量单位成本。然后绘制喷射流边缘及其能耗以完成图形。
答案 2 :(得分:1)
这可以很容易地表示为最小加权区间调度算法。 每个喷射流都是一个具有重量的区间,目标是选择最小化重量的区间。
请参阅以下链接了解最大加权间隔时间安排或google了解详情:
您可以针对您的问题将max
计算结果替换为min
。
Algorithm to find the best combination of items under certain constraints