打家劫舍
1.一开始我用vector<int> dp;然后做题报错,看了看答案,要写成vector<int> dp = vector<int>(length);要初始化数组长度为length
想了会儿明白了,直接vector<int> dp不能直接给dp[0]赋值啊!要给vector开辟一块空间才能操作的嘛!
2.这道题要写出他的状态转移方程!!害!
状态边界条件:当n = 1 时,dp[0] = nums[0], 当n = 2时, dp[1] = max(nums[0], nums[1]); 十分重要
状态转移方程:dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);
dp存的每一个值,都是当前最优解
class Solution {
public:
int rob(vector<int>& nums) {
if (nums.empty()) {
return 0;
}
int size = nums.size();
if (size == 1) {
return nums[0];
}
vector<int> dp = vector<int>(size);
dp[0] = nums[0];
dp[1] = max(nums[0], nums[1]);
for (int i = 2; i < size; i++) {
dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);
}
return dp[size - 1];
}
};