【動態規划】最大子串和


問題 G: 【動態規划】最大子串和

時間限制: 1 Sec  內存限制: 128 MB
提交: 33  解決: 22
[提交][狀態][討論版]

題目描述

給定一整型數列{a1,a2...,an},找出連續非空子串{ax,ax+1,...,ay},使得該子序列的和最大,其中,1<=x<=y<=n。


輸入

第一行是一個整數N(N<=10)表示測試數據的組數)
每組測試數據的第一行是一個整數n表示序列中共有n個整數,隨后的一行里有n個整數I(-100=<I<=100),表示數列中的所有元素。(0<n<=1000000)

輸出

對於每組測試數據輸出和最大的連續子串的和。

樣例輸入

1
5
1 2 -1 3 -2

樣例輸出

5
解題思路:參照http://www.cnblogs.com/TWS-YIFEI/p/5590532.html
代碼:
#include <iostream>
#include <cstdio>

using namespace std;

int a[1000005];
int sum[1000005];

int main()
{
    int N;
    long int n;
    long int ans=0;
    scanf("%d",&N);
    for(int z=0;z<N;z++){
        scanf("%ld",&n);
        for(long int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        ans=0;
        sum[0]=a[0];
        for(long int i=1;i<n;i++){
            if(sum[i-1]>0){
                sum[i]=sum[i-1]+a[i];
            }else{
                sum[i]=a[i];
            }
            if(ans<sum[i]){
                ans=sum[i];
            }
        }
        if(z!=N-1){
            printf("%d\n",ans);
        }else{
            printf("%d",ans);
        }
    }
    return 0;
}

 


免責聲明!

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



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