题目考察的知识点:动态规划
题目解答方法的文字分析:在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)); } };