最大连续子数列和

最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大。

8
-2 6 -1 5 4 -7 2 3
第一行的8是说序列的长度是8,然后第二行有8个数字,即待计算的序列。
对于这个序列,我们的答案应该是14,所选的数列是从第2个数到第5个数,这4个数的和是所有子数列中最大的。

分析:动态规划,保证每到一个位置,该位置的和要么为当前值,要么加上前一组数的最大和

//最大连续子数列和
#include<iostream>
#include<cstring>
using namespace std;
int n;
int main()
{
    while(cin>>n){
        int a[n];
        for(int i=0;i<n;i++) cin>>a[i];
        int b[n];
        memset(b,0,sizeof(b));
                for(int i=1;i<n;i++) cout<<b[i]<<" ";
                cout<<endl;
                b[0]=a[0];
        for(int i=1;i<n;i++){
            if(b[i-1]>0) b[i]=b[i-1]+a[i];
            else b[i]=a[i]; 
        }
        for(int i=1;i<n;i++) cout<<b[i]<<" ";
        cout<<endl;
    }
} 
View Code

猜你喜欢

转载自www.cnblogs.com/helloworld2019/p/10395037.html
今日推荐