【发布时间】:2019-03-26 09:26:17
【问题描述】:
问题
a 给了你一块 a 大小的木板。电路板上有 n 个组件,它们必须连接到电路板的边缘,且电线长度尽可能短。
电线是直的,不能重叠。
找到算法,通过这些约束将组件连接到边缘。
约束是:
时间:1s
空间:无限
1
1
示例:
输入: 4 3 2 1 2 3 3 3 输出: 5 向下 向上 向上我已经尝试过的
我发现了一种递归,让我用上面提供的数据来展示这个想法。
我有一个 n 位掩码,其中第 i 个位置的 1 表示我们考虑了这个组件,而 0 没有。
当我开始递归时,我有 n 个:
111 / | \ / | \ 011 101 110 / \ / \ / \ 001 010 001 100 010 100当我来到最低级别时,我正好有一个1。我为这个简单的问题找到了最佳解决方案(最短的方法),然后我将其用于进一步的计算。
但是,我有一个问题,这个最优解可能会导致重叠。
【问题讨论】:
-
能解释一下输入输出格式吗? (那是什么5)。你确定总会有解决方案吗?这个递归树如何准确地告诉你解决方案?
-
我们在第一行收到 a,即方板的大小。然后我们得到n,即成分的数量。之后我们输入板上触点的 n 行坐标。输出的含义如下: 5 - 可能的最小导线总长度 然后是第 i 个组件的导线方向。是的,可能存在这样一种情况,即没有解决方案,但可以保证输入是正确且可解决的。
-
这个递归树代表了我的 dp 的状态。 001 表示,我忽略组件#1 和#2,并为组件#3 找到最小可能的解决方案。然后我将它遍历到顶部并查看情况,当我只有 2 个组件时,例如011 - 我忽略组件 #1 并一起查看组件 #2 和 #3 的最小可能解决方案
-
好的!事情现在更清楚了。我仍然不明白为什么有 5 根电线而不是 3 根作为最小解决方案。
-
一根电线可以连接多个组件吗?除了向上或向下,电线还能向左还是向右?
标签: algorithm dynamic-programming