打家劫舍(一)_牛客题霸_牛客网 (nowcoder.com)
沿路的一排房间,不能连续偷两家,比如ABS,偷了A就不能投B
要求偷的钱最多!
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int rob(vector<int>& nums) {
// write code here
//dp[i] 偷了 最多偷了多少钱
vector<int> dp(nums.size() + 1, 0);
dp[1] = nums[0];
for(int i = 2; i <= nums.size(); i++){
dp[i] = max(dp[i - 1], nums[i - 1] + dp[i - 2]);
}
return dp[nums.size()];
}
};
该问题是一个经典的动态规划问题,目标是从一排房子中偷窃最多的钱,但不能连续偷两家。代码实现了一个动态规划解决方案,其中dp[i]表示考虑前i个房子时能偷到的最大金额。初始状态dp[1]=nums[0],然后对于每个i>1,dp[i]取dp[i-1](不偷当前房子)和nums[i-1]+dp[i-2](偷当前房子但不偷前一个)中的较大值。最后返回dp[nums.size()]即为答案。

被折叠的 条评论
为什么被折叠?



