198. 打家劫舍
这应该又是动态规划题目,在找敢感觉了,f(x)=max(f(x-1),f(x-2)+num[i]),其实在写的时候想到状态方程跨越四个元素
但是想想,先写写看吧,毕竟能运行就好,果然
下面代码加上一句
a[1] = max(nums[0],nums[1]);便正确了,哈哈哈
查看代码
class Solution {
public:
int rob(vector<int>& nums) {
vector<int>a(nums.size());
if(nums.size()==1){
return nums[0];
}
if(nums.size()==2){
return nums[0]>nums[1]?nums[0]:nums[1];
}
a[0] = nums[0];
a[1] = nums[1];
for(int i=2; i<nums.size();i++){
if(nums[i]+a[i-2]>a[i-1])
a[i] = a[i-2]+nums[i];
else a[i] = a[i-1];
}
return a[nums.size()-1];
}
};

于是考虑四个吧

查看代码
class Solution {
public:
int rob(vector<int>& nums) {
vector<int>a(nums.size());
if(nums.size()==1){
return nums[0];
}
if(nums.size()==2){
return nums[0]>nums[1]?nums[0]:nums[1];
}
a[0] = nums[0];
a[1] = nums[1];
if(nums.size()==3){
a[2] = nums[2]+nums[0]>nums[1]?nums[2]+nums[0]:nums[1];
int temp = a[0]>a[1]?a[0]:a[1];
return temp>a[2]?temp:a[2];
}
a[2] = nums[2]+nums[0]>nums[1]?nums[2]+nums[0]:nums[1];
for(int i=3; i<nums.size();i++){
int temp;
if(nums[i]+a[i-2]>a[i-1])
temp = a[i-2]+nums[i];
else temp = a[i-1];
if (temp > a[i-3]+nums[i])
a[i] = temp;
else a[i] = a[i-3]+nums[i];
}
return a[nums.size()-1];
}
};

浙公网安备 33010602011771号