思路:循环情况下,第一个节点的选择会影响最后一个节点的选择,也就是说最后一个节点的状态的转移需要知道第一个节点和前一个节点的状态。所以我们选择分类:当第一个节点选择时,最后一个节点不选时的最高饱腹度;当第一个节点不选择时的最高饱腹度。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int eatGrass (int[] nums) {
        // write code here
        int len = nums.length;
        int [][] dp1 = new int[len + 10][2];
        int [][] dp2 = new int [len + 10][2];
        dp1[1][1] = nums[0];

        for (int i = 2; i <= len; i++) {
            dp1[i][0] = Math.max(dp1[i - 1][1], dp1[i - 1][0]);
            if (i != 2 && i != len) {
                dp1[i][1] = dp1[i - 1][0] + nums[i - 1];
            }
        }

        for (int i = 2; i <= len; i++) {
            dp2[i][0] = Math.max(dp2[i - 1][1], dp2[i - 1][0]);
            dp2[i][1] = dp2[i - 1][0] + nums[i - 1];
        }


        return Math.max(dp1[len][1],Math.max(dp1[len][0],Math.max(dp2[len][0],dp2[len][1])));
    }
}