码迷,mamicode.com
首页 > 其他好文 > 详细

最大序列和

时间:2018-03-19 22:41:46      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:str   iostream   扩展   +=   mes   using   log   pos   return   


数组中整数有正有负
求一连续子段,使得和最大化
例如:
2,4,-7,5,2,-1,2,-4,3
最大连续段:
5,2,-1,2

其最大和为8

#include<iostream>
using namespace std;
int f(int a[],int begin,int end)//[begin,end)左闭右开 
{
    if(end-begin==1){
        if(a[begin]>0) return a[begin]; 
        return 0;
    }
    int k=(begin+end)/2;
    int t1=f(a,begin,k);//不包含k
    int t2=f(a,k,end);
    int t3a=0;//从中间向左边去扩展,看最大是多少 
    int sum=0;
    for(int i=k-1;i>=begin;i--)//从中间往前加,看最大是多少,
    {
        sum+=a[i];
        if(sum>t3a)t3a=sum;//向左扩展的结果 
    } 
    int t3b=0;
    sum=0;
        for(int i=k;i<end;i++)//从中间往后加,看最大是多少,
    {
        sum+=a[i];
        if(sum>t3b)t3b=sum;//向右扩展的结果 
    } 
    int t3=t3a+t3b;
    int max=0;
    if(t1>max)max=t1;
    if(t2>max)max=t2;
    if(t3>max)max=t3;
    return max;
} 
int work(int a[])
{
 return f(a,0,9);//增加参数容易递归 
}
int main()
{
    int a[9]={2,4,-7,5,2,-1,2,-4,3};
    cout<<work(a)<<endl;
    return 0;
}

 

最大序列和

标签:str   iostream   扩展   +=   mes   using   log   pos   return   

原文地址:https://www.cnblogs.com/zhangshuyao/p/8605521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!