1050 循环数组最大子段和

摘要:
1050循环数组的最大子段和基准时间限制:1秒空间限制:131072KB得分:10难度:2级算法问题关注由N个整数组成的循环序列a[1]、a[2]、a[3]、…+a[j]的连续子段之和的最大值。当所有整数都为负时,总和为0。输入行1:整数序列的长度N行2-N+1:N个整数输出循环数组的子段的最大总和。输入示例6-211-413-5-2输出示例20与上一主题类似,但有一个循环……首先,直接计算整个序列的最大子串和,然后将所有序列取相反的数字,然后减去和得到最大子串总和,然后取较大的值。
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
1050 循环数组最大子段和第2张 收藏
1050 循环数组最大子段和第3张 关注
N个整数组成的循环序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列)。当所给的整数均为负数时和为0。
例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。
 
Input
第1行:整数序列的长度N(2 <= N <= 50000)
第2 - N+1行:N个整数 (-10^9 <= S[i] <= 10^9)
Output
输出循环数组的最大子段和。
Input示例
6
-2
11
-4
13
-5
-2
Output示例
20

和上道题目类似,然而有循环的存在....先直接求一下整个序列的最大子串和然后把序列全部取相反数再求一下用sum减去就是最大子串和,然后取较大值。

代码:

 1 #include <vector>
 2 #include <map>
 3 #include <set>
 4 #include <algorithm>
 5 #include <iostream>
 6 #include <cstdio>
 7 #include <cmath>
 8 #include <cstdlib>
 9 #include <string>
10 #include <cstring>
11 #include <queue>
12 #include <stack>
13 using namespace std;
14 
15 long long dp[55555],a[55555];
16 
17 long long solve(int n,long long dp[])
18 {
19     long long ans=0,b=0;
20     for(int i=0; i<n; i++){
21         if(b>=0){
22             b+=dp[i];
23         }
24         else{
25             b=dp[i];
26         }
27         if(b>ans){
28             ans=b;
29         }
30     }
31     return ans;
32 }
33 
34 int main()
35 {
36     int n;
37     scanf("%d",&n);
38     long long sum=0;
39     memset(dp,0,sizeof(dp));
40     for(int i=0; i<n; i++){
41         scanf("%lld",&dp[i]);
42         sum+=dp[i];
43         a[i]=-dp[i];
44     }
45     long long p=solve(n,dp);
46     long long q=solve(n,a);
47     long long m=max(p,sum-q);
48     printf("%lld
",m);
49 }

免责声明:文章转载自《1050 循环数组最大子段和》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP curl函数模拟爬虫(操作cookie)python基础学习4-函数、内置函数、os模块、time模块下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

grep多条件查找"与","或"

这里以jps命令为例jps查看全部的jvm进程"与"查找下图是所有jvm进程如果想查找256891ThriftServer服务用"与"查找可以理解为是条件查找命令:jps|grep-eer|grep-eT"或"查找方法一:grep-E'A|B'和grep-eA-eB方法二:egrep'A|B'方法三:awk'/A|B/'...

Redis设置Auth认证保护

Redis有一种保护数据安全的身份验证方法。有两种方法可以设置此身份验证。一个是通过配置文件。另一种是直接在Redis客户端命令中设置参数requirepas。首先是在配置文件中查找参数requirepass。这是配置Redis访问密码的参数。由于Redis具有很强的并发能力,并且只使用密码,攻击者可能会在短时间内发送大量密码猜测请求,这很容易被暴力破解。因...

Django如何安装指定版本

Django的最新版本默认安装为:pipinstalldjangoDjango,然后是版本号:pipinstalldjango==1.11.7如果使用pipinstall库的安装速度较慢,您可以使用豆瓣的图片:pipinstalldjango==1.11.7-ihttp://pypi.douban.com/simple--trusted-hostpypi.d...

Vue浏览器调试工具VueTools安装以及使用

ue-devtools是一款基于chrome浏览器的插件,用于vue应用的调试,这款vue调试神器可以极大地提高我们的调试效率。vue-devtools使用起来还是比较简单的,上手非常的容易,这里就细讲其使用说明了。安装方法二:这里以chrome浏览器为例:1、打开chrome网上应用店,搜索vue.js注:如果打不开页面需要代理选择第一个,点击添加至chr...

matlab中figure 创建图窗窗口

示例figure将f指定的图窗作为当前图窗,并将其显示在其他所有图窗的上面。figure;同时使用多个图窗创建两个图窗,然后创建一个线图。f1=figure;f2=figure;plot;将当前图窗设置为f1,使其成为下一个绘图的目标。figure;scatter;输入参数全部折叠f-目标图窗Figure对象目标图窗,指定为Figure对象。默认情况下,Nu...

DB2锁表或超时解决方案

命令如下:db2"forceapplication"4、使用命令listapplication查看是否已经断开了哪些进行了死锁的进程。...