acdream 1682 吃不完的糖果(环形最大子段和)
Problem Description
娜娜好不容易才在你的帮助下"跳"过了这个湖,果然车到山前必有路,大战之后必有回复,大难不死,必有后福!现在在娜娜面前的就是好多好多的糖果还有一些黑不溜秋的东西!不过娜娜眼中只有吃不完的糖果!娜娜高兴地快要蹦起来了!
这时有一位挥着翅膀的女孩(天使?鸟人?)飞过来,跟娜娜说,这些糖果是给你的~(娜娜已经两眼放光)~你可以带走~(娜娜已经流下了口水)~但是~(神马?还有但是?)~这位神仙姐姐挥一挥翅膀~飘过了一片云彩,糖果和那些黑不溜秋的东西顿时飞了起来,落到地上成了摆成一个奇怪的图形。
神仙姐姐很满意,转过来对娜娜说:“这些糖果和黑洞(神马?黑洞?)分成n堆,每堆要么都是糖果,要么是黑洞,围成一个圈(即第1堆的旁边是第n堆和第2堆),你可以选择连续若干堆,然后带走,不过这些黑洞嘛,会馋嘴的小孩吸进去,你必须拿糖果去中和掉。”
娜娜喜欢糖果,但不喜欢动脑子~于是就把这个问题交给你,怎样才能让娜娜带走最多的糖果呢?
Input
多组数据,首先是一个正整数t(t<=20)表示数据组数
对于每组数据,包括两行,第一行是一个正整数n(3<=n<=100000)表示堆数
第二行是n个整数x[i](1<=|x[i]|<=1000),如果是个正整数,则说明这是一堆数量为x[i]的糖果,如果是个负整数,则说明这是一个需要用abs(x[i])颗糖果去中和的黑洞。
Output
Sample Input
3
5
1 2 3 4 5
5
1 -2 3 -4 5
5
-1 -2 -3 -4 -5
Sample Output
15
7
0
Hint
对于样例1,娜娜可以把所有的糖果都拿走,所以输出15(=1+2+3+4+5)
对于样例2,娜娜可以拿走第1,2,3,5堆的糖果,别忘了这是摆成一个圈,所以输出7(=1+(-2)+3+5)
对于样例3,等待娜娜的是5个黑洞,可怜的娜娜,一个糖果都拿不掉,所以输出0
由于输入数据较多,请谨慎使用cin/cout
题意:给一个环形序列,求最大连续子段和。
思路:设arr[0]和arr[n-1]这个地方为缺口。
有两种可能:
(1)答案不经过缺口处。那么就是普通的最子段和了。
(2)答案经过缺口处。那么此环的最小子段和就必定不会经过缺口处。将数组中所有的元素都取相反数,然后再按照(1)的方法求最大子段和,设为anti-sum。然后用整个序列之和sum加上anti-sum就行了。
#include <bits/stdc++.h>
using namespace std;
const int N=;
int arr[N], t, n;
int cal()
{
int cnt=, sum=;
for(int i=; i<n; i++)
{
sum+=arr[i];
if(sum>cnt) cnt=sum;
if(sum<) sum=;
}
int cnt1=, sum1=, total=;
for(int i=; i<n; i++)
{
total+=arr[i];
sum1+=-arr[i];
if(sum1>cnt1) cnt1=sum1;
if(sum1<) sum1=;
} return cnt>(total+cnt1)?cnt:total+cnt1;
} int main()
{
// freopen("input.txt", "r", stdin);
cin>>t;
while(t--)
{
scanf("%d",&n);
for(int i=; i<n; i++) scanf("%d",&arr[i]);
printf("%d\n",cal());
}
return ;
}
AC代码
acdream 1682 吃不完的糖果(环形最大子段和)的更多相关文章
- C - 娜娜梦游仙境系列——吃不完的糖果
C - 娜娜梦游仙境系列——吃不完的糖果 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Oth ...
- Codeforces Round #780 (Div. 3)
A. Vasya and Coins 题目链接 题目大意 Vasya 有 a 个 1-burle coin,有 b 个 2-burle coin,问他不能通过不找钱支付的价格的最小值. 思路 如果 a ...
- zzuli oj 1146 吃糖果
Description HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢连续两次吃一样的糖果,喜欢先吃一颗A种类的糖果,下一次换一种 口味,吃一 ...
- hdu 1205 吃糖果【鸽巢原理】
题目 这道题不难,看别人博客的时候发现大家都说用鸽巢原理,这是个什么鬼,于是乎百度之. 1.把某种糖果看做隔板,如果某种糖果有n个,那么就有n+1块区域,至少需要n-1块其他种糖果才能使得所有隔板不挨 ...
- hdu_吃糖果(思维题)
吃糖果 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submiss ...
- Num 34 : HDOJ : 1205 吃糖果 [ 狄利克雷抽屉原理 ]
抽屉原理: 桌上有十个苹果,要把这十个苹果放到九个抽屉里,不管如何放,我们会发现至少会有一个抽屉里面至少放两个苹果. 这一现象就是我们所说的" ...
- hdu_1205_吃糖果_201404021440
吃糖果 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submis ...
- acdream 1683 村民的怪癖(KMP,经典变形)
Problem Description 娜娜费劲九牛二虎之力终于把糖果吃完了(说好的吃不完呢?骗人,口亨~),于是,缘溪行,忘路之远近.忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,娜娜甚异之 ...
- bzoj 4338: BJOI2015 糖果
4338: BJOI2015 糖果 Time Limit: 2 Sec Memory Limit: 256 MBSubmit: 200 Solved: 93[Submit][Status][Dis ...
随机推荐
- POJ 2000
#include<iostream> #include<cstdio> #define MAXN 10009 using namespace std; ]; int main( ...
- D&F学数据结构系列——B树(B-树和B+树)介绍
B树 定义:一棵B树T是具有如下性质的有根树: 1)每个节点X有以下域: a)n[x],当前存储在X节点中的关键字数, b)n[x]个关键字本身,以非降序存放,因此key1[x]<=key2[x ...
- sql 语句的各种连接
数据表: 1.两种连接表现方式一样 其中 where 条件语句可以省略,当时join 的on 语句不可省略 2.左连接,右连接 左连接:返回左表的所有数据,并根据条件返回左右表的连接结果,如果未匹配到 ...
- CI中的控制器中要用model中的方法,是统一写在构造器方法中,还是在每一个方法中分别写
Q: CI中的控制器中要用model中的方法,是统一写在构造器方法中,还是在每一个方法中分别写 A: 建议统一写,CI框架会自动识别已经加载过的类,所以不用担心重复加载的问题 class C_User ...
- http协议本身能获取客户端Mac地址问题
http 位于网络应用程 应用层 会话层 表示层 传输层 网络层 数据链路层 物理层 数据在最高层开始传输 没经历下面一层加一层的头,然后传入目的电脑再进行一层层的解刨,所以http本来没有mac而接 ...
- PHP5.4最新特性
PHP5.4最新特性 官网:ChangeLog-5.php#5.4.0 原文Oracle:LAMP 体系有了新的竞争,但此版本中的特性使 PHP 再次挑战极限. 稍微做了修改.: 概述总结:1. ...
- VS2010中打开VS2013/VS2012项目
VS2010中打开VS2013/VS2012项目 (2014-04-03 23:47:53) 转载▼ 分类: IT VS低版本打开高版本创建的项目时会提示"选择的文件是解决方案文件,但是 ...
- http://www.cnblogs.com/draem0507/archive/2013/02/01/2889317.html
http://www.cnblogs.com/draem0507/archive/2013/02/01/2889317.html
- 一起简单写一下AIDL,入个门
前话 最近接触了Android开发的一个新知识,AIDL(¬_¬因为到现在都没用过) 因此不断谷歌找资料找Demo,自己尝试写一下. 因为用AndroidStudio作为开发环境,期间遇到过许多问题, ...
- 进入第一个Android应用界面
前话 距离上次学习Android已经过去了半年了,这半年我干嘛去了? 嘛相信大家也没兴趣了解,简单来说就是我学习了周边的知识技术,最后终于转回Android. 感觉开发一个Android需要很多知识吧 ...