课堂小测

求一个数组子数组的最大值

数组为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]);

}

}
posted @ 2022-03-12 15:15  李彬159  阅读(39)  评论(0)    收藏  举报