1050 循环数组最大子段和
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题

 收藏
 关注

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\n",m);
49 }

转载于:https://www.cnblogs.com/wangmengmeng/p/5436607.html

1050 循环数组最大子段和相关推荐

  1. 51nod 1050 循环数组最大子段和【环形DP/最大子段和/正难则反】

    1050 循环数组最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该 ...

  2. 51Nod 1050 循环数组最大子段和

    有两种方式: 1.在首尾之间 2.在尾首之间 对于第一种直接来dp就好,第二种需要将其数组全部取负,然后取到其最大值(肯定是负数的最大值)然后dp即可,最后比较这两个答案谁比较大就输出哪个 1 #in ...

  3. 【51nod - 1050】循环数组最大子段和(dp)

    题干: N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1], ...

  4. 51nod 1050循环数组最大字段和

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 思路解析:一开始想着直接将长度为n的数组延长至2n-1 ...

  5. 51Nod-1050 循环数组最大段和【最大子段和+最小子段和+DP】

    1050 循环数组最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+ ...

  6. 循环数组的最大子段和

    问题描述: N个整数组成循环序列,求这个序列的最大子段和. 例如:-2   11  -4  13  -5  -2    ANSWER: 20 解决: 解决这个问题需要有求解最大子段和的基础. 循环数组 ...

  7. 循环数组最大字段和(51Nod-1050)

    题目 N个整数组成的循环序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a ...

  8. 【C++算法与数据结构学习笔记------用循环数组实现队列】

    照王晓东<数据结构>(C++语言版)上打的,以备留用. 1 #include <iostream> 2 using namespace std; 3 template<t ...

  9. 力扣【下一个更大元素】leetcode-503.下一个更大元素 Ⅱ:单调栈解法+循环数组解法

    题目: 思路与解法: 1.如果是暴力法,只需要遍历就可以了,但是那样的话时间复杂度就是O(N^2); 2.可以把这几个数字,抽象成为高度不一样的柱子: 3.寻找的过程,就是从当前柱子去看,被后面的哪一 ...

最新文章

  1. selenium之frame操作
  2. JDK17 要来了!会带来什么新特性?不好意思,我还在JDK7 踏步走...
  3. 【设计模式】状态模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
  4. 数据结构-joseph环
  5. mysql数据导入导出方法总结
  6. vavr_使用Vavr在Java 8流中更好的异常处理
  7. pythonwebui自动化_python+selenium实现web端UI自动化测试
  8. LINQPad工具-linq、sql、IL优化和转换
  9. Retrofit请求数据对错误以及网络异常的处理
  10. 使用GIT不小心merge后的回滚操作
  11. 仅对 LINQ to Entities 中已排序的输入支持方法“Skip”。必须在调用“Skip”方法之前调用方法“OrderBy”
  12. 如何锻炼个人的演讲、写作与沟通能力
  13. 历史上各大帝国面积排行榜
  14. android中base64编码解码,Andorid自带的Base64编解码表
  15. 电脑桌面图标变成长方形咋办_为什么我的界面上的图标全部被一个长方形的图标覆盖了?...
  16. python新手入门-------字符串与函数(3)
  17. Android-UI 开源控件
  18. 原生JavaScript实现团购——限时抢
  19. Learning Angular 学习Angular Lynda课程中文字幕
  20. 数字传输系统的最佳接收与误码分析-python实现

热门文章

  1. mysql网络安装教程_详细教程--MySQL的安装与配置
  2. 1×pbs缓冲液配方_小鼠毒性休克综合征毒素1(TSST-1)ELISA试剂盒 -价格/说明书-赫澎研选_产品说明_仪器仪表技术文献...
  3. html5效果源码,10款web前端值得学习的 HTML5 效果附源码
  4. gridview的sort_GridView排序:SortDirection始终升序
  5. python样本期望值_用 python 做 z 检验,t 检验
  6. java excel 操作 jar包_[JAVA]使用POI向Excel中写入数据以及如何在Intellj IDEA中打jar包...
  7. php array in array,浅谈PHP array_search 和 in_array 函数效率问题
  8. java 流 复制文件_【Java】使用字节流复制文件
  9. mysql的基准测试_mysql基准测试 -benchmarks
  10. 【存储知识学习】第四章-七种RAID-《大话存储》阅读笔记