题解 | #最大序列和#

最大序列和

https://www.nowcoder.com/practice/df219d60a7af4171a981ef56bd597f7b

#include <stdio.h>

#define N 1000000
#define MIN -1000000

int main() {
    int dp[N];  //存放加上当前元素的最大子序列和
    int num[N]={0};  //存放序列元素
    int n;
    int max;  //记录最大子序列和
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++){
            scanf("%d",&num[i]);
        }
        dp[0]=num[0];
        max=MIN;
        for(int i=1;i<n;i++){
            dp[i]=(num[i])>(num[i]+dp[i-1])?(num[i]):(num[i]+dp[i-1]);  //如果当前元素前一个的最大子序列和大于0则加上,否则不加
            if(dp[i]>max)
                max=dp[i];
        }
        printf("%d\n",max);
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务