【问题标题】:Interesting basic DP problem (Theif loot houses)有趣的基本 DP 问题(Theif 战利品房屋)
【发布时间】:2020-04-15 10:17:18
【问题描述】:

小偷想要抢劫房屋。他知道每间房子里有多少钱。他不能连续抢劫三座房屋。找出他能掠夺的最大金钱。

示例 -

6 [5 5 10 100 10 5]

5+10+100+5=120。

在这之后我们可以概括因为他不能连续抢劫k个房屋。

【问题讨论】:

  • 到目前为止您尝试过什么?你能发布你的努力吗?
  • 在上面的例子中,我认为应该是[(5) 5 (10) (100) 10 (5)],它会给出 120
  • 是的,你是对的。
  • @ArunGowda 我无法解决连续两次的战利品问题。在处理这个美丽的问题时有很多困惑。 :(
  • 小偷遵守规则? ;)

标签: arrays algorithm dynamic-programming


【解决方案1】:

要解决这个问题,您需要记住 DP 试图模仿穷举搜索。在您的示例中,小偷需要为每个房屋选择是否应该抢劫。他对他“访问”的连续房屋的数量有额外的限制(这可以作为基本条款来处理,我发现它更容易遵循)。

这给了我们以下递归公式:

Base clause 1 for forbidden path:
T(i, 0) = -INFINITY   
Base clause 2 before looting any house:
T(0, c) = 0
Recursive formula:
T(i, c) = max { T(i-1, c-1) + loot[i] , T(i-1, k) }
                       ^                    ^
               loot i'th hourse       Skip i'th house

完成后,解决方案在于T(n,c) 一些1 <= c <= k

【讨论】:

  • T(i, c) = max { T(i-1, c-1) + loot[i] , T(i-1, k) } 。我觉得应该是这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 2012-11-06
  • 2014-08-30
相关资源
最近更新 更多