给出一个长度n的序列:A1,A2,A3,……,An。求最大连续子段和。
即:要求找到1<=i<=j<=n,使得A[i]+ A[i+1]+……+A[j]尽量大。

题目来源:
洛谷OJ: P1115 最大子段和
题目描述
给出一段序列,选出其中连续且非空的一段使得这段和最大。
输入格式:
输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度。
第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列。
输出格式:
输入文件maxsum1.out仅包括1个整数,为最大的子段和是多少。子段的最小长度为1。
输入样例#1:
7
2 -4 3 -1 2 -4 3
输出样例#1:
4
说明
【样例说明】2 -4 3 -1 2 -4 3
【数据规模与约定】
对于40%的数据,有N ≤ 2000。
对于100%的数据,有N ≤ 200000。

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 long long fun1(int a[],int n)//返回最大连续子段和。O(n^3),可以获取子段位置
 4 {
 5     int i,j,k;
 6     long long best=a[0],sum;//初始最大值
 7     int bestI=0,bestJ=0;
 8
 9     for(i=0;i<n;i++)
10     {
11         for(j=i;j<n;j++)
12         {
13             sum=0;
14             for(k=i;k<=j;k++) sum=sum+a[k];
15             if(sum>best) { best=sum; /*bestI=i; bestJ=j;*/ }
16         }
17     }
18     return best;
19 }
20 long long fun2(int a[],int n)//返回最大连续子段和。O(n^2),可以求得子段的位置。
21 {
22     int *s=(int *)malloc(sizeof(int)*n);
23     int i,j,bestI=0,bestJ=0;
24     long long best,sum;
25
26     s[0]=a[0];
27     for(i=1;i<n;i++) s[i]=s[i-1]+a[i];
28
29     best=a[0];
30     for(i=0;i<n;i++)
31     {
32         for(j=i;j<n;j++)
33         {
34             if(i==0) sum=s[j];
35             else sum=s[j]-s[i-1];
36             best=(sum>best?sum:best);
37             //if(sum>best) { best=sum; bestI=i; bestJ=j; }
38         }
39     }
40     free(s);
41     return best;
42 }
43 long maxSum(int a[],int x,int y)//返回序列a[]在下标[x,y)范围内的最大子段和。O(nlogn),无法求得最大子段位置
44 {
45     long mid,V,L,R;
46     long max,s1,s2,s3;
47     int i;
48
49     if(y-x==1)return a[x];//假如只有一个元素,最大子段和就是该元素本身
50
51     mid=x+(y-x)/2;//分治法第一步:划分为[x,m)和[m,y)两个子段
52     s1=maxSum(a,x,mid);//分治法第二部:递归求解
53     s2=maxSum(a,mid,y);
54     max=(s1>s2?s1:s2);
55
56     V=0;L=a[mid-1];//分治法第三步:合并(1)——从分界点开始往左的最大连续子段和
57     for(i=mid-1;i>=x;i--) { V=V+a[i]; L=(V>L?V:L); }
58
59     V=0;R=a[mid];//分治法第三步:合并(2)——从分界点开始往右的最大连续子段和
60     for(i=mid;i<y;i++) { V=V+a[i]; R=(V>R?V:R); }
61
62     V=L+R;
63     return (V>max?V:max);//把子问题的解与L+R比较
64 }
65 long fun4(int a[],int n)//返回a[]的最大子段和
66 {
67     long temp,sum;
68     int i;
69     temp=a[0];sum=a[0];
70     for(i=1;i<n;i++)
71     {
72         if(temp<0) temp=a[i];
73         else temp=temp+a[i];
74         if(temp>sum) sum=temp;
75     }
76     return sum;
77 }
78 int main(int argc, char *argv[])
79 {
80     int n,i,a[200003];
81     long long ans;
82     freopen("testdata.in","r",stdin);
83
84     scanf("%d",&n);
85     for(i=0;i<n;i++) scanf("%d",&a[i]);
86     //ans=fun1(a,n);        //超时
87     //ans=fun2(a,n);        //得部分分,其余测试点超时
88     //ans=maxSum(a,0,n);    //AC
89     ans=fun4(a,n);            //AC
90     printf("%lld\n",ans);
91     return 0;
92 }

最大连续和问题【四种不同的算法】相关推荐

  1. bat判断文件是否存在_BAT面试必问题系列:JVM判断对象是否已死和四种垃圾回收算法总结...

    JVM系列: 面试题一:判断对象是否已死 判断对象是否已死就是找出哪些对象是已经死掉的,以后不会再用到的,就像地上有废纸.饮料瓶和百元大钞,扫地前要先判断出地上废纸和饮料瓶是垃圾,百元大钞不是垃圾.判 ...

  2. PHP实现四种基本排序算法

    ###PHP实现四种基本排序算法 前提:分别用冒泡排序法, 快速排序法, 选择排序法, 插入排序法将下面数组中的值按照从小到大的顺序进行排序. (1)冒泡算法 $arr=array(1,43,54,6 ...

  3. php四种基础排序算法的运行时间比较

    /*** php四种基础排序算法的运行时间比较* @authors Jesse (jesse152@163.com)* @date 2016-08-11 07:12:14*/ //冒泡排序法 func ...

  4. 基本的排序算法php,php四种基础排序算法

    原标题:php四种基础排序算法 曾经有网友问我关于面试题的问题,今天就发一个面试题笔试经常会出的排序算法,大家可以参考一下,如有问题可以给我留言. /** * php四种基础排序算法的运行时间比较 * ...

  5. [转载] java实现四种常用排序算法

    参考链接: 用Java排序 四种常用排序算法 ##注:从小到大排 ##冒泡排序## 特点:效率低,实现简单 思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有 ...

  6. NIST发布四种抗量子密码算法

    导读 近日,美国商务部国家标准与技术研究所(NIST)公布了首批四种抗量子加密算法,这是自2016年启动后量子密码标准化项目以来,NIST首次发布入围标准的抗量子算法. 抢占抗量子算法的标准阵地 抗量 ...

  7. 五分钟让你搞懂Nginx负载均衡原理及四种负载均衡算法

    前言 今天这篇文章介绍了负载均衡的原理以及对应的四种负载均衡算法,当然还有对应的指令及实战,欢迎品尝.有不同意见的朋友可以评论区留言! 负载均衡 所谓负载均衡,就是 Nginx 把请求均匀的分摊给上游 ...

  8. 【讲解 + 模板】四种最短路算法的比较

    四种最短路算法的比较 最短路 最短路,顾名思义,最短的路径. 我们把边带有权值的图称为带权图.边的权值可以理解为两点之间的距离.一张图中任意两点之间会有不同的路径相连.最短路径就是指连接两点的这些路径 ...

  9. 选择排序稳定吗_最常见的四种数据结构排序算法你不知道?年末怎么跳槽涨薪...

    前言 在学习数据结构的时候必然接触过排序算法,而且在日常开发中相信排序算法用得也比较多.而排序算法众多,各个效率又不同,难以记住.小编今天会介绍一些常用排序算法的特点和实现,对比不同排序算法的效率. ...

  10. PHP 四种基本排序算法的代码实现(2)

    2019独角兽企业重金招聘Python工程师标准>>> 许多人都说算法是程序的核心,算法的好坏决定了程序的质量.作为一个初级phper,虽然很少接触到算法方面的东西.但是对于基本的排 ...

最新文章

  1. 机器学习填坑:你知道模型参数和超参数之间的区别吗?
  2. 宏基因组合种树,2-4天领证,1/2号车满员,3号车成立,机会来了
  3. 为什么在大型 Angular 应用里我们需要使用 ngrx
  4. linux memcached 运行,linux下查看Memcached运行状态
  5. nlp2-数学基础(信息论,概率论、词义消歧)
  6. 华为交换机S3700-TELNET远程管理交换机配置
  7. win10下openpose1.5安装
  8. MVC上传文件受限制
  9. 【零基础学Java】—对象的向上和向下转型(二十七)
  10. 面对疫情等群体性危机,程序员如何在家高效办公?
  11. 事故记录-过多进程致使CPU卡死
  12. 黑莓7290使用技巧-转载
  13. Python视频制作 MoviePy框架的基础使用
  14. mysql中FIND_IN_SET函数用法
  15. 读DL论文心得之RCNN
  16. 蓄力一纪,可以远矣!十二年的百度地图和他的AI新征程
  17. BUUCTF刷题记录 Harley Quinn
  18. linux 查询文件大小大于1g_必备linux命令有哪些?你了解多少
  19. 阿里云云计算ACP学习(七)---弹性伸缩服务AS
  20. 推荐一款word转pdf超好用的包:aspose-words(解决中文乱码)

热门文章

  1. Redis-集群监控之Redis monitor
  2. 计算机基础职教云答案,计算机基础课程答案
  3. orm和mysql_orm与mysql
  4. java join()用法_四种联系(join)的区别及用法
  5. dvt高危患者的护理措施_dvt的预防及护理
  6. 各种门锁的内部结构图_便宜超好用:小米智能门锁 E上手体验报告
  7. js滚动条下拉一定值_JS逆向 | 无限Debugger之淘大象
  8. mysql11导入数据_MySQL专题11之MySQL导出数据、MySQL导入数据
  9. C语言递归算法(二)
  10. 互联网晚报 | 8月28日 星期六 | 我国网民规模超10亿;vivo首款自研影像芯片下月首发;同程艺龙拟改名为同程旅行...