最大子段和

844人阅读 评论(0) 收藏 举报

问题

给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。

思路

从第一个元素开始,计算1-2的和、1-3的和、直到1-n的和,sum来记录最大的和,在循环过程中如果有和比sum大,把当前最大和替换掉,记录besti和bestj;然后计算2-3的和、2-4的和、直到2-n的和。需要2次for循环,时间复杂度O(n^2).

代码

#include <iostream>
using namespace std;
//求a中的最大子段和
int maxSum(int a[],int n){
   int i,j,sum=0,besti,bestj;
   for(i=0;i<4;i++){
      int newsum=0;
      for ( j= i; j <n; ++j)
      {
          newsum+=a[j];
          if(newsum>sum){
             sum=newsum;
             besti=i;
             bestj=j;
          }
      }
   }
   cout<<"开始位置:"<<a[besti]<<endl;
   cout<<"开始位置:"<<a[bestj]<<endl;

   return 0;
}
int main(){
     int a[6]={-2,11,-4,13,-5,-2};
     maxSum(a,6);

     int b[10]={1,-5,6,-2,11,-7,23,-13,15,-3};
     maxSum(b,10);
}

输出

开始位置:11
开始位置:13
开始位置:6
开始位置:15

时间复杂度

O(n^2)

查看评论

最大子段和及其变形小结

最近做刷51nod的时候,看到了这类题目,挺有意思的,小结一下 51nod1049 最大子段和 题意:O(-1) 思路:经典问题 复杂度:O(n) 代码: #include #incl...
  • guhaiteng
  • guhaiteng
  • 2016-11-13 00:04:26
  • 487

GSS 1 区间最大子段和

GSS 1   区间最大子段和    刚学线段树,在codevs上做完线段树练习1-3,然后高二神犇LTY给我看了这个GSS系列,今天下午终于做完了。之前好多题都没往博客上写,之后到寒假会慢慢补。 ...
  • wbxdhr
  • wbxdhr
  • 2017-01-13 16:52:55
  • 317

动态规划算法--蛮力算法求最大子段和

问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所...
  • morixinguan
  • morixinguan
  • 2016-06-28 14:20:12
  • 1278

51Nod 1049 最大子段和(简单DP)

1049 最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 N个整数组成的序列a[1],a[...
  • zwj1452267376
  • zwj1452267376
  • 2016-02-10 15:55:01
  • 782

C语言最大子段和问题(动态规划)

C语言最大子段和问题(动态规划)
  • little_hamster
  • little_hamster
  • 2016-11-14 17:42:54
  • 1124

poj 2479 最大连续子段和 dp算法

一、文章来由晚上一水~~poj2479,一道简单的dp问题,回顾一下动态规划二、求最大子段和这道题是求一个序列中的两个子段的最大和,是求纯的最大和的一个变体,例如题目中给出的例子 1 -1 2 2 ...
  • Scythe666
  • Scythe666
  • 2015-09-18 21:25:39
  • 1079

(3)最大子段和问题____动态规划

最大子段和问题就是:  给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为...
  • y1196645376
  • y1196645376
  • 2014-12-24 11:08:25
  • 1814

蛮力法、分治法和动态规划法设计最大子段和问题的算法

  • 2012年03月31日 08:52
  • 384KB
  • 下载

分治法求最大子段和

前边介绍了动态规划法求最大子段和,这里用分治法来求。 分治法顾名思义,就是分而治之,化大为小,把一个大问题的解逐步分成小问题,最后再把小问题的解逐步合成大问题的解。 上代码简单易懂:#includ...
  • jycboy
  • jycboy
  • 2015-07-27 20:45:38
  • 1315

最大子段和问题(暴力 分治 动规)

算法设计与分析--求最大子段和问题 问题描述: 给定由n个整数组成的序列(a1,a2, …,an),求该序列形如      的子段和的最大值,当所有整数均为负整数时,其最大子段和为0。 1 暴力...
  • SDUTyangkun
  • SDUTyangkun
  • 2016-09-20 20:29:06
  • 524
    StackOverFlow
    http://stackoverflow.com/users/6526424
    统计
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 101万+
    积分: 9699
    排名: 2295
    博客专栏
    最新评论