PTA 最大子列和問題(10 分)


最大子列和問題(10 分)

給定K個整數組成的序列{ N1​​, N2​​, ..., NK​​ },“連續子列”被定義為{ Ni​​, Ni+1​​, ..., Nj​​ },其中 1ijK。“最大子列和”則被定義為所有連續子列元素的和中最大者。例如給定序列{ -2, 11, -4, 13, -5, -2 },其連續子列{ 11, -4, 13 }有最大的和20。現要求你編寫程序,計算給定整數序列的最大子列和。

本題旨在測試各種不同的算法在各種數據情況下的表現。各組測試數據特點如下:

  • 數據1:與樣例等價,測試基本正確性;
  • 數據2:102個隨機整數;
  • 數據3:103個隨機整數;
  • 數據4:104個隨機整數;
  • 數據5:105個隨機整數;

輸入格式:

輸入第1行給出正整數K (100000);第2行給出K個整數,其間以空格分隔。

輸出格式:

在一行中輸出最大子列和。如果序列中所有整數皆為負數,則輸出0。

輸入樣例:

6
-2 11 -4 13 -5 -2

輸出樣例:

20
#include <iostream>
using namespace std;
int main()
{
    int a[100005];
    int n;
    cin>>n;
    bool f=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        if(a[i]>0)
            f=1;
    }
    if(f==0) cout<<0;
    else
    {
        int s=0;
        int max=0;
        for(int i=1;i<=n;i++)
        {
            s+=a[i];
            if(s<0)
            {
                s=0;
            }
            if(s>max) max=s;
        }
        cout<<max;
    }
    return 0;
}

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM