Skip to content

Latest commit

 

History

History
 
 

198.House-Robber

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

198.House-Robber

这是“双状态”DP最典型的一道题。它的特点是:每一轮的状态只取决于上一轮的状态;并且每一轮的状态只有两种,通常就是“取”或“不取”。

结合本题来说,是否打劫第k间房子(的收益),完全取决于是否打劫第k-1间房子(的收益)。令rob[k]表示打劫第k间的最大收益,norob[k]表示不打劫第k间的最大收益。我们可以分析出相邻两轮状态之间的递推关系:

rob[k] = norob[k-1];  // 想要打劫第k间房子,必须基于第k-1间房子没打劫。
norob[k] = max(rob[k-1],norob[k-1])+nums[k]; // 不打劫第k间房子的最大收益,显然对应了rob[k-1],norob[k-1]之间较大的值。

对于初始状态,我们可以直接考虑第0间房子是否打劫及其收益。这样状态转移方程可以从第1间房子开始适用。

Leetcode Link