首页 > 其他 > 详细

最大连续子数列和

时间:2019-02-18 13:41:44      阅读:365      评论:0      收藏:0      [点我收藏+]

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

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

 

最大连续子数列和

原文:https://www.cnblogs.com/helloworld2019/p/10395037.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!