【问题标题】:Minimum cost for colouring the house?为房子着色的最低成本?
【发布时间】:2017-05-03 18:13:34
【问题描述】:

我遇到了以下问题

一排有 N 个房子。每个房子都可以涂成红色, 绿色或蓝色。为每个房屋中的每个房屋着色的成本 颜色不同。找到每个房子的颜色,使得没有两个 相邻房屋颜色相同,着色总成本 所有的房子都是最小的。

这里是complete question

对我来说这个问题看起来有点令人困惑,因为目标是最小化成本并确保没有相邻的房子有相同的颜色。在那种情况下,我不应该选择 三种颜色中成本最低的只有两种。

这里说的是颜色的成本

  1. 红色 100 美元
  2. 绿色 $200
  3. 蓝色 $300

我有 5 座排屋要粉刷

这将是我的算法

  1. 选择红色和绿色,因为它们的成本最低
  2. 计算 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


【解决方案1】:

这(大概)是一个家庭作业问题。我想目的是教你实现一个贪心算法:

  1. 使用最便宜的颜色(“红色”)绘制第一座房子。
  2. 用可用的最便宜的颜色粉刷下一栋房子。

第二个将在“红色”和“绿色”之间交替,但您不必提前选择颜色。

如果我分配这个问题,下一个问题将是“假设你只有足够的油漆来解决这个问题”。

【讨论】:

  • 我相信你的回答同意我建议的算法。在您的算法中,您也永远不会使用蓝色。正确的 ?正如careercup.com/question?id=9941005 的答案中所建议的那样,我没有得到 DP 将如何在这里提供帮助?
猜你喜欢
  • 2014-08-30
  • 2013-03-15
  • 2021-12-04
  • 2018-12-24
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
相关资源
最近更新 更多