题意是这样:
输入n个数,
输出最大【严格递增】子段和
21 = 3+5+6+7
import java.util.Scanner;
public class 最大花之能量 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n + 1];
int[] dp = new int[n + 1]; // dp存放的是当前i位置的最大能量
for (int i = 1; i <= n; i++) {
int t = sc.nextInt();
a[i] = t;
dp[i] = t;
}
int ans = 0;
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
if (a[j] > a[i]) {
dp[j] = Math.max(dp[j], dp[i] + a[j]);
}
}
ans = Math.max(ans, dp[i]);
}
System.out.println(ans);
}
}
用DP,复杂度O(n2)
转移方程:如果递增,取两个值的最大值:
一个是自己本身,
一个是从上一个元素 i 来的值,并且加上当前的值a[j]