题解 | #不能连续吃草的牛II#
不能连续吃草的牛II
https://www.nowcoder.com/practice/0b6e9ca056eb4166b4bfd4f7c90b2c61
题目考察的知识点:动态规划
题目解答方法的文字分析:在nums[0]处位置吃不吃会产生两种结果,如果吃,那么1和n-1位置就不能吃,所以就变成一个线性在2到n-2位置(求不能连续吃草的牛I)记得加上nums[0];如果不吃,就变成一个线性在1到n-1位置的问题。
本题解析所用的编程语言:c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int rob(vector<int>& nums, int left, int right)
{
int n = nums.size();
vector<int> f(n), g(n);
f[left] = nums[left];
for (int i = left + 1; i <= right; ++i)
{
f[i] = g[i-1] +nums[i];
g[i] = max(g[i-1], f[i-1]);
}
return max(f[right], g[right]);
}
int eatGrass(vector<int>& nums)
{
// write code here
int n = nums.size();
return max(nums[0] + rob(nums,2,n-2), rob(nums,1, n-1));
}
};

