题目链接: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. Java_异常_05_ OutOfMemoryError: Java heap space

    一.异常现象: 二.异常原因 JAVA的堆栈设置太小 注: 出现此异常之后,会引发其他的问题. 三.异常解决 手动设置Heap size: 修改 TOMCAT_HOME/bin/catalina.sh ...

  2. java是用utf-16be编码方式编的。中文和英文都是两个字节

  3. (转)#ifndef的用法

    原文链接:http://wenku.baidu.com/link?url=c4doqVo3U429RkwTN5eaJIfD2rEu-1bLKKQXuqO8drmL359PhUjVmzC7P94wBY9 ...

  4. Java读取文件的时候,如何让指针重新回到文件的开头

    今天在测试IO流的使用的时候发现在reader读取文件之后,再向文件添加内容,再继续读文件,打印出的结果只能读取追加的文件. 如何才能重新读取呢?试了mark和reset,似乎会报异常.记在这以后看是 ...

  5. 如果你的NavigationDrawer里面的Item没有响应,Drawer不能左滑关闭

    如果你的NavigationDrawer里面的Item没有响应,Drawer不能左滑关闭,应该是因为你没有把主要内容放在DrawerLayout标签下的第一位. The main content vi ...

  6. Linux编程之错误代码

    头文件/usr/include/asm-generic/errno-base.h定义错误码: #ifndef _ASM_GENERIC_ERRNO_BASE_H #define _ASM_GENERI ...

  7. 洛谷【P1561】[USACO12JAN]爬山Mountain Climbing

    我对\(Jhonson\)算法的理解:https://www.cnblogs.com/AKMer/p/9863620.html 题目传送门:https://www.luogu.org/problemn ...

  8. 为什么对象序列化要定义serialVersionUID

    对于实现了java.io.Serializable接口的实体类来说,往往都会手动声明serialVersionUID,因为只要你实现了序列化,java自己就会默认给实体类加上一个serialVersi ...

  9. 【转】 Pro Android学习笔记(六一):Preferences(5):组织Preference

    目录(?)[-] PreferenceCategory Child Preference PreferenceCategory 如果有多个preference,我们希望能在他们组织在一起.有两种方式, ...

  10. sql 查看表结构

    sqlserver 查看表结构 exec sp_help @TableName --得到表信息.字段,索引.constraint. exec sp_pkeys @TableName --得到主键. e ...