zoukankan      html  css  js  c++  java
  • 51nod 1049 最大子段和

    题目:
    N个整数组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续子段和的最大值。当所给的整数均为负数时和为0。
    例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。
    Input

    第1行:整数序列的长度N(2 <= N <= 50000)
    第2 - N + 1行:N个整数(-10^9 <= A[i] <= 10^9)

    Output

    输出最大子段和。

    看好多大佬都没有考虑全为负数的情况,但也AC了,全为负数时应该输出0呀

    代码实现:

    #include <iostream>
    using namespace std;
    typedef long long ll;
    ll a[50010];
    int main()
    {
        ll n,i;
        cin>>n;
        for(i=0;i<n;i++)
        {
            cin>>a[i];
        }
        ll sum=a[0],m=a[0];
        int t=0; 
        if(a[0]>0) t=1;
        for(i=1;i<n;i++)//子段开头和最后一定是正整数 
        {
            if(a[i]>0) t=1;
            if(m>0) m+=a[i];
            else m=a[i];//当m不再增大时,开始新的子段 
            if(sum<m) sum=m; //更新最大值 
        }
        if(t==0) cout<<"0"<<endl;//全为负数,则和为0 
        else cout<<sum<<endl;
        return 0;
    } 
  • 相关阅读:
    NodeJS简介
    SQL学习笔记(1)
    Linux常用命令03
    Linux常用命令02
    Linux常用命令01
    Java接口和抽象类的区别
    Optional解决空指针
    JVM的内存管理机制-转载
    mysql explain详解-转载
    rabbitmq消息处理-转载
  • 原文地址:https://www.cnblogs.com/cnlik/p/11851878.html
Copyright © 2011-2022 走看看