课堂小测
求一个数组子数组的最大值
数组为vec[],设dp[i-1] 是以vec[i-1]结尾的子数组的最大和,对于元素vec[i], 它有两种选择:a、vec[i]接着前面的子数组构成最大和,b、vec[i]自己单独构成子数组。则dp[i] = max{dp[i-1]+vec[i], vec[i]}。
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n;
n = in.nextInt();
int[] vec = new int[n];
for (int i = 0; i < vec.length; i++) {
vec[i] = in.nextInt();
}
int[] dp = new int[n];
dp[0] = Math.max(dp[0] + vec[0], dp[0]);
for (int i = 1; i < n; i++) {
dp[i] = Math.max(dp[i-1] + vec[i], dp[i]);
dp[i] = Math.max(dp[i], 0);
}
System.out.println(dp[n-1]);
}
}