zoukankan      html  css  js  c++  java
  • 最大序列和


    数组中整数有正有负
    求一连续子段,使得和最大化
    例如:
    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;
    }
  • 相关阅读:
    洛谷P1613 跑路
    洛谷P2149 Elaxia的路线
    洛谷P3119 草鉴定
    洛谷P1972 HH的项链
    洛谷P2458 保安站岗
    uva10061
    uva579
    uva 127 "Accordian" Patience
    uva10177 (2/3/4)-D Sqr/Rects/Cubes/Boxes?
    uva156
  • 原文地址:https://www.cnblogs.com/zhangshuyao/p/8605521.html
Copyright © 2011-2022 走看看