首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有趣的基本DP问题(抢房子)

有趣的基本DP问题(抢房子)
EN

Stack Overflow用户
提问于 2020-04-15 18:17:19
回答 1查看 120关注 0票数 0

小偷想抢房子。他知道每所房子里有多少钱。他不能连续抢三套房子。找出他能抢到的最多的钱。

示例:

6 5 5 10 100 10 5

5+10+100+5=120。

在此之后,我们可以推广,因为他不能掠夺k个连续的房子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-15 18:28:45

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

这为我们提供了以下递归公式:

代码语言:javascript
复制
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

完成后,解决方案取决于某些1 <= c <= kT(n,c)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61226333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档