import java.util.Arrays; import java.util.Scanner; public class Main { // 输入获取 public static void main(String[] args) { Scanner sc = new Scanner(System.in); Integer[] arr = Arrays.stream(sc.nextLine().split(",")).map(Integer::parseInt).toArray(Integer[]::new); System.out.println(getResult(arr)); } // 算法入口 public static int getResult(Integer[] arr) { int n = arr.length; int[] dp = new int[n]; for (int i = 0; i < n; i++) { if (i == 0) { dp[0] = Math.max(0, arr[0]); } else if (i < 3) { dp[i] = Math.max(0, dp[i - 1] + arr[i]); } else { dp[i] = Math.max(dp[i - 3], dp[i - 1] + arr[i]); } } return dp[n - 1]; } }为什么动态规划返回的是dp[n-1]
时间: 2024-04-22 13:28:25 浏览: 152
java代码-import java.util.Scanner;
5星 · 资源好评率100%
动态规划返回的是`dp[n-1]`是因为在这个算法中,`dp[i]`表示以第`i`个元素结尾的子数组的最大和。我们需要找到整个数组中的最大和子数组,因此最终的结果就是`dp[n-1]`,其中`n`是数组的长度。
在算法的循环中,我们计算了每个位置上的最大和子数组,并将其保存在`dp`数组中。最后,`dp[n-1]`就是整个数组的最大和子数组的和。
希望对你有所帮助!如果你还有其他问题,请随时提问。
阅读全文