题目考察的知识点:动态规划

题目解答方法的文字分析:在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));
    }
};