【发布时间】:2016-08-13 14:47:17
【问题描述】:
我刚刚学习动态编程,偶然发现了一个我不知道如何用 Python 表述的问题:
给定一个长度为 55 的二进制数组
H,1表示屋顶上有一个洞,0表示没有洞。 您可以使用的尾部长度为 1、13 或 55,每个尾部的部署成本分别为 3、13 和 50。 对于给定的孔数组H,返回覆盖所有孔的最小成本。
根据我所学到的,第一步是找到基本案例,并通过归纳推理。 所以,这里有一些我很容易找到的基本案例:
- 13 号瓷砖比 5 块 1 号瓷砖更方便(成本:13 比 15 或更多)
- 55 号瓷砖比 4 块 13 号瓷砖更方便(成本:50 对 52 或更多)
最初我认为第一点意味着如果在 13 个连续空间中有 5 个或更多孔,我应该始终选择 13 块。但是我认为这取决于以下漏洞。
如果你在问题中加入 1-tiles,第二点就更成问题了。例如,考虑在[0, 15, 29, 44] 位置有 4 个单孔,最好使用 4 个 1-tile(1 x 55-tile 成本 50,4 x 13-tiles = 52)。
所以看起来我必须评估阵列中所有可能的切片组合的孔的“间距”是多少。
我怎样才能把上面的代码写成(甚至是伪)代码?
【问题讨论】:
-
你用python开始了一些东西吗?
-
这听起来比 NP-complete 的 Knapsack_problem 还要复杂...
-
这不是和stack的Computer Science关系更大吗? #just_asking
-
你可以重叠瓷砖吗?
-
@Jean-FrançoisFabre,不是真的,除了试图在没有真正方向的情况下操纵输入。
标签: python algorithm dynamic-programming