acdream 1682 吃不完的糖果(环形最大子段和)
2015-06-26 18:46
295 查看
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=100005; int arr , t, n; int cal() { int cnt=0, sum=0; for(int i=0; i<n; i++) { sum+=arr[i]; if(sum>cnt) cnt=sum; if(sum<0) sum=0; } int cnt1=0, sum1=0, total=0; for(int i=0; i<n; i++) { total+=arr[i]; sum1+=-arr[i]; if(sum1>cnt1) cnt1=sum1; if(sum1<0) sum1=0; } return cnt>(total+cnt1)?cnt:total+cnt1; } int main() { // freopen("input.txt", "r", stdin); cin>>t; while(t--) { scanf("%d",&n); for(int i=0; i<n; i++) scanf("%d",&arr[i]); printf("%d\n",cal()); } return 0; }
AC代码
相关文章推荐
- 在Windows下搭建Android开发环境
- 第三阶段冲刺
- 尸体解剖
- 黑马程序员——Java基础---泛型、集合框架工具类:collections和Arrays
- tomcat服务器虚拟路径配置
- 黑马程序员——Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)
- 查看microsoft sqlserver2008的端口号
- kafka教程
- Android中连接蓝牙设备时遇到createRfcommSocketToServiceRecord的UUID问题和BluetoothSocket的connect失败
- 解决wordpress发布文章,图片无法居中的问题
- (十九)WebGIS中I查询的原理及设计(包含AGS、GeoServer、Supermap)
- mac下的命令行终端工具-iTerm
- LAD(Log Archive Dest)配置不当引起备份失败
- 黑马程序员——Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
- 在arcgis javascript 中map地图的div 总是显示高度400的问题
- 第二阶段冲刺总结
- 华为2012.09.03浙大机试题
- ExtJs布局中,控件如何水平居中?
- ExtJs布局中,控件如何水平居中?
- 做汉堡