题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1049

题意:中文题诶~

思路:本题和51nod1049(题解)类似,不同的是本题的数列是一个环;

我们可以这样想,取得最大和的子段有两种情况:

 1.从第i个元素到第j个元素,i<=j; 

 2.从第i个元素到第j个元素,i>j;

第1种情况和1049那题是一样的;

第2种情况我们可以反过来想,所有元素的总和是固定的,若 i~j 能取到最大值,那么 j~i 的和为最小子段和,我们可以用和 1 中类似的方法求出最小子段和,再用所有元素的和减去它就能得到最大值啦;

两种情况取得的最大值中较大着即为答案;

代码:

 #include <bits/stdc++.h>
#define ll long long
using namespace std; const int MAXN=1e5+;
ll a[MAXN], b[MAXN], c[MAXN]; ll min(ll a, ll b){
return a>b?b:a;
} ll max(ll a, ll b){
return a>b?a:b;
} int main(void){
ll n, ans=, mm=, mn=, x, num=, cnt=;
cin >> n;
for(int i=; i<=n; i++){
cin >> x;
ans+=x;
a[i]=ans;
if(ans>mm){
b[i]=ans;
mm=ans;
}else{
b[i]=b[i-];
}
if(ans<mn){
c[i]=ans;
mn=ans;
}else{
c[i]=c[i-];
}
}
cout << endl;
for(int i=; i<=n; i++){
num=min(num, a[i]-b[i-]);
cnt=max(cnt, a[i]-c[i-]);
}
ans=ans-num;
cout << (ans>cnt?ans:cnt) << endl;
return ;
}

51nod1049(最大子段和2)的更多相关文章

  1. 51Nod--1049最大子段和

    1049 最大子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a ...

  2. 51nod1049 最大子段和【动态规划】

    N个整数组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续子段和的最大值.当所给的整数均为负数时和为0. 例如:-2,11,-4,13,-5,- ...

  3. 51Nod1049 最大子段和

    我们来先看题: N个整数组成的序列a1,a2,a3,-,an,求该序列如ai+ai+1+-+aj的连续子段和的最大值.当所给的整数均为负数时和为0. 例如:-2,11,-4,13,-5,-2,和最大的 ...

  4. 51nod1049(计算最大子段和)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1049 题意:又是仲文题诶- 思路:暴力会超时,又好像没什么专门 ...

  5. 最大子段和(c++)

    // 最大子段和.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namesp ...

  6. 51Node 1065----最小正子段和

    51Node  1065----最小正子段和 N个整数组成的序列a[1],a[2],a[3],…,a[n],从中选出一个子序列(a[i],a[i+1],…a[j]),使这个子序列的和>0,并且这 ...

  7. 最大M子段和 V2

    51nod1053 这题还是我们熟悉的M子段和,只不过N,M<=50000. 这题似乎是一个堆+链表的题目啊 开始考虑把所有正数负数锁在一起. 比如: 1 2 3 -1 –2 -3 666 缩成 ...

  8. 51nod 循环数组最大子段和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1050 对于普通的数组,只要求一次最大子段和即可.但是这题是可以循环的,所 ...

  9. [日常训练]最大M子段和

    Description 在长度为的序列中选出段互不相交的子段,求最大字段和. Input 第一行两个整数. 第二行个整数. Output 一行一个整数表示最大值. Sample Input 5 2 1 ...

随机推荐

  1. hadoop_学习_01_入门准备

    一.入门准备 1.零基础学习Hadoop 2.大数据初学者应该知道的知识

  2. luogu1801 黑匣子

    惊了呀 Splay Treap 这都什么玩意 两个优先队列搞定 #include <bits/stdc++.h> using namespace std; #define LL long ...

  3. 利用stomp.js实现websocket功能,接收ActiveMQ消息队列

    一.ActiveMQ消息发送端 package lixj; import java.util.Date; import javax.jms.Connection; import javax.jms.C ...

  4. 【LeetCode】048. Rotate Image

    题目: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwis ...

  5. 立方体贴图(Cubemap)

    http://blog.csdn.net/asdjy123/article/details/51190643 点击打开链接 好东西保存方便查看 立方体贴图(Cubemap) 原文 Cubemaps 作 ...

  6. docker异常处理

    Error running DeleteDevice dm_task_run failed重启docker即可 Error starting daemon: error initializing gr ...

  7. Hive安装配置要点

    官网下载安装包: 在Profile下面定义HIVE_HOME以及HADOOP_HOME,然后在PATH下面添加HOME/bin目录,用于在命令行直接敲beeline,hive即可执行命令: 需要在ha ...

  8. POJ1442:Black Box

    浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 题目传送门:http://poj.org/problem?id=1442 用对顶堆维护第\(k\)小 ...

  9. Python-实现与metasploit交互并进行ms17_010攻击

    关于ms17_010,可参考http://www.cnblogs.com/sch01ar/p/7672454.html 目标IP:192.168.220.139 本机IP:192.168.220.14 ...

  10. 忘记mysql密码,但是可以用navicat修改MySQL密码

    1.首先:要知道你的账户 2.打开可以连接的navicat,在查询语句页面,输入以下操作,就可以修改成功密码了