题解 | #最大上升子序列和#
最大上升子序列和
https://www.nowcoder.com/practice/dcb97b18715141599b64dbdb8cdea3bd
#include <stdio.h> //思路:注意当前子序列和一定是要与i之前所有满足上升条件的最大子序列和相加 //不仅仅是与上一个满足上升条件,是之前所有满足条件的最大值 int a[1000];//原始数组 int sum[1000];//序列和数组 void dp(int n) { sum[0] = a[0]; for (int i = 1; i < n; i++) { int max = 0; for (int j = 0; j < i; j++) { if (a[j] < a[i] && sum[j] > max) { max = sum[j]; } } sum[i] = max + a[i]; } } int main() { int n; while (scanf("%d", &n) != EOF) { for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } dp(n); int max = sum[0]; for (int i = 1; i < n; i++) { if (sum[i] > max) { max = sum[i]; } } printf("%d\n", max); } }