1648 最大和

时间限制: 1 s

空间限制: 256000 KB

题目等级 : 钻石 Diamond

传送门

题目描述 Description

N个数围成一圈,要求从中选择若干个连续的数(注意每个数最多只能选一次)加起来,问能形成的最大的和。

输入描述 Input Description

第一行输入N,表示数字的个数,第二行输入这N个数字。

输出描述 Output Description

输出最大和。

样例输入 Sample Input

8

2 -4 6 -1 -4 8 -1 3

样例输出 Sample Output

14

数据范围及提示 Data Size & Hint

数据说明:

40% 1<=N<=300

60% 1<=N<=2000

100% 1<= N<=100000,答案在longint范围内.

/*
T.
连成环啊连成环.
赶脚数据中负数应该不少.
所以复杂度在o(n^2/2)~o(n^2)之间.
然后10^10 华丽丽的T了.
10^5范围应该考虑logn,log^2n,nlogn……
*/
#include<iostream>
#include<cstdio>
#define MAXN 100001*2
#define LL long long
using namespace std;
LL f[MAXN],n,x,s[MAXN],tot=-1e18;
LL read()
{
LL x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
return x*f;
}
int main()
{
n=read();
for(int i=1;i<=n;i++) x=read(),s[i]=s[i+n]=x;
for(int i=1;i<=n;i++){
if(s[i]>0)
{
f[i]=s[i];tot=max(tot,f[i]);
for(int j=i+1;j<i+n;j++){
if(f[j-1]>0) f[j]=f[j-1]+s[j];
else f[j]=x;
tot=max(tot,f[j]);
}
}
tot=max(s[i],tot);
}
printf("%lld",tot);
return 0;
}
/*
一开始怎么也没想到orz.
其实还是挺好想的.
答案的贡献来自于
(1)连续和(不跨环).
(2)连续和(跨环).
不跨环的o(n)扫一遍即可.
跨环的因为所有数的价值和是一定的
只需求出最小连续和用价值总和减掉即可(显然).
最后两者取大.
*/
#include<iostream>
#include<cstdio>
#define LL long long
#define MAXN 100001
using namespace std;
LL x,tot1,tot2,tot,n,ans1=-1e12,ans2=1e12;
LL read()
{
LL x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
return x*f;
}
int main()
{
n=read();x=read();
tot=tot1=tot2=x;
for(int i=2;i<=n;i++)
{
x=read();
if(tot1>0) tot1+=x;
else tot1=x;
if(tot2<0) tot2+=x;
else tot2=x;
tot+=x;
ans1=max(ans1,tot1),ans2=min(ans2,tot2);
}
printf("%lld",max(tot-ans2,ans1));
return 0;
}

Codevs 1648 最大和的更多相关文章

  1. 最大和(codevs 1648)

    题目描述 Description N个数围成一圈,要求从中选择若干个连续的数(注意每个数最多只能选一次)加起来,问能形成的最大的和. 输入描述 Input Description 第一行输入N,表示数 ...

  2. CJOJ 1308 【HNOI 2002 】营业额统计 / CodeVS 1296 营业额统计(STL,二分)

    CJOJ 1308 [HNOI 2002 ]营业额统计 / CodeVS 1296 营业额统计(STL,二分) Description Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一 ...

  3. codevs 2622 数字序列

    2622 数字序列 提交地址:http://codevs.cn/problem/2622/  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold     题目描述 De ...

  4. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  5. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  8. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  9. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

随机推荐

  1. Storm系列(二)系统结构及重要概念

    在Storm的集群里面有两种节点:控制节点和工作节点,控制节点上面运行Nimbus进程,Nimbus负责在集群里面分配计算任务,并且监控状态.每一个工作节点上面运行Supervisor进程,Super ...

  2. AJAX中文乱码PHP完美解决(IE和Firefox兼容)

    最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助. 众所周知,使用AJAX传送和接收中文参数时,如果不在客 ...

  3. [IOS地图开发系类]2、位置解码CLGeocoder

      接第一步的操作,获取到地址信息经纬度后,我们可以对其进行解码,解码采用的CLGeocoder这个类,使用方式如下: 1.在ViewControlelr.m文件中声明一个CLGeocoder的属性, ...

  4. linux jmail乱码

    在Windows 里面,标题和内容都正常, 在linux里面,--- 1.字符串 more /etc/sysconfig/i18n   export LANG=en_US.UTF-8 ====默认是e ...

  5. ThinkPHP3.1 常量参考

    预定义常量 常量 说明 URL_COMMON=0 普通模式 URL URL_PATHINFO=1 PATHINFO URL URL_REWRITE=2 REWRITE URL URL_COMPAT=3 ...

  6. FormMove

    private    { Private declarations }    procedure WMMOVE(var Msg: TMessage); message WM_MOVE;  proced ...

  7. Linux 设置系统时间和日期 API

    嵌入式Linux 设置时间和日期 API ,它是busybox要提取的源代码. Linux设置时间和日期的步骤: 1. 设置系统时间和日期: 2. 该系统的时间和日期,同步到硬件. #include ...

  8. oracle 查看表属主和表空间sql

    查看表空间 select * from user_tablespaces where table_name = 'TableName' 查看表属主 select  Owner  from all_ta ...

  9. iOS开发简单高效的数据存储

    在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题,你是用什么方法来持久保存数据的?这是在几乎每一次关于iOS技术的交流或讨论都会被提到的问题,而且大家对这个问题的热情持续高涨.本文主要从概 ...

  10. quartz多个scheduler实现

    1.首先排除错误用法 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = sche ...