题解 | #不能连续吃草的牛II#
不能连续吃草的牛II
https://www.nowcoder.com/practice/0b6e9ca056eb4166b4bfd4f7c90b2c61
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int eatGrass(vector<int>& nums) {
// write code here
if (nums.size() == 1) return nums[0];
if (nums.size() == 2) return max(nums[0], nums[1]);
vector<int> dp(nums.size());
int ansMax = 0;
// 第一个位置吃,最后一个位置不吃
dp[0] = nums[0];
dp[1] = max(dp[0], nums[1]); // 这里需要注意,第一个位置吃不吃影响的是遍历的后面的位置
// dp表示的是当前可以获得的最大的饱腹感,如果为[1, 3, 4,..], 那么dp[1]就为3,此时就表示吃第二个位置
// 不吃第一个位置
for (int i = 2; i < nums.size()-1; i++) {
dp[i] = max(dp[i-1], dp[i-2]+nums[i]);
}
// 不吃第一个位置
vector<int> dp1(nums.size());
dp1[0] = 0;
dp1[1] = nums[1];
for (int i = 2; i < nums.size(); i++) {
dp1[i] = max(dp1[i-1], dp1[i-2]+nums[i]);
}
return max(dp[nums.size()-2], dp1[nums.size()-1]);
}
};
