题解 | #最大上升子序列和#

最大上升子序列和

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);
  }
}

全部评论

相关推荐

11-05 07:29
贵州大学 Java
点赞 评论 收藏
分享
双非一本失业第二年:《机器视觉垃圾分类》
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务