【问题描述】给定一个数组,求数组中某一段元素和的最大值。注意这一段元素是连续的。如[31,-41,59,26,-53,58,97,-93,-23,84],的最大和是187=59+26+(-53)+58+97
【输入形式】第一行输入数组长度N(0<N<=20000)后面N行输入数组元素
【输出形式】输出子数组的最大和
【样例输入】
10
31
-41
59
26
-53
58
97
-93
-23
84
【样例输出】
187
解题分析:动态规划求最长子数组
if (dp[i - 1] > 0)
dp[i] = dp[i - 1] + arr[i];
package com.company;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
int[] dp = new int[n];
for (int i = 0; i < n; i++)
arr[i] = sc.nextInt();
dp[0] = arr[0];
for (int i = 1; i < n; i++) {
if (dp[i - 1] > 0)
dp[i] = dp[i - 1] + arr[i];
else
dp[i] = arr[i];
}
Arrays.sort(dp);
System.out.println(dp[n - 1]);
}
}