import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int eatGrass (int[] nums) {
// write code here
if (nums.length == 0) return 0;
if (nums.length == 1) return nums[0];
int res1 = robRange(nums, 0, nums.length - 2);
int res2 = robRange(nums, 1, nums.length - 1);
return Math.max(res1, res2);
}
public int robRange(int[] nums, int start, int end) {
if (start == end) return nums[start];
int[] dp = new int[nums.length];
dp[start] = nums[start];
dp[start + 1] = Math.max(nums[start], nums[start + 1]);
for (int i = start + 2; i <= end; i++) {
dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]);
}
return dp[end];
}
}
- 编程语言:Java。
- 考察的知识点:动态规划。
- 代码的简短文字解释:maxGrass方法接受一个整数数组nums作为参数,并返回能够获得的最大草量。首先检查nums数组是否为空或长度为0,如果是则直接返回0。创建一个大小为n的动态规划数组dp,初始化dp[0]为第一块草地的草量。如果草地数量大于1,将dp[1]初始化为第一、第二块草地中草量较大的值。从第三块草地开始遍历,每次更新dp[i]为前两块草地中选择较大值的最大草量。返回dp[n-1],即为能够获得的最大草量。