【发布时间】:2017-05-03 18:13:34
【问题描述】:
我遇到了以下问题
一排有 N 个房子。每个房子都可以涂成红色, 绿色或蓝色。为每个房屋中的每个房屋着色的成本 颜色不同。找到每个房子的颜色,使得没有两个 相邻房屋颜色相同,着色总成本 所有的房子都是最小的。
对我来说这个问题看起来有点令人困惑,因为目标是最小化成本并确保没有相邻的房子有相同的颜色。在那种情况下,我不应该选择 三种颜色中成本最低的只有两种。
这里说的是颜色的成本
- 红色 100 美元
- 绿色 $200
- 蓝色 $300
我有 5 座排屋要粉刷
这将是我的算法
- 选择红色和绿色,因为它们的成本最低
-
计算 5%2。
如果 5%2 == 1 则从最后一个开始并选择最后一个房子的颜色为红色($100)。现在选择备用颜色
如果 5%2 == 0 则从头开始并选择备用颜色
我看到Is "house coloring with three colors" NP? 建议使用动态编程但我不确定我的方法有什么问题以及为什么这里需要动态编程?
【问题讨论】:
-
可能作者打算为每种房屋颜色组合设定一个成本,这样您就无法静态选择颜色。否则,这是一个合理的想法。
-
@DavidEisenstat 这里的主要意图是
no two adjacent houses have the same colour and the total cost of colouring all the houses is minimum.所以即使作者打算为每种房屋颜色组合设定一个成本,最低成本将是我在我的算法中解释的。这是完整的问题careercup.com/question?id=9941005 -
这里有一个澄清,将房屋 1 涂成红色并不总是与将房屋 2 涂成红色的成本相同。
-
一般情况下,您需要所有颜色,例如,如果有三栋房子,#1 最便宜的是红色,#2 最便宜的是绿色,#3 最便宜的是蓝色。
标签: algorithm language-agnostic dynamic-programming