题目链接: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 ;
}

最新文章

  1. sublime_text_2 ubuntu下无法输入中文 解决方法
  2. python FileError
  3. 【读书笔记】iOS-引用计数
  4. nodejs端口被占用。
  5. hdu 5063 Operation the Sequence(Bestcoder Round #13)
  6. Java GC机制和对象Finalize方法的一点总结
  7. Python自动生产表情包
  8. POPTEST 150801 祝大家前途似锦
  9. python源文件转换成exe问题解决贴
  10. Jenkins连接Window服务器,上传jar并启动
  11. GitHub上fork一个项目贡献代码以及同步原作者的修改【转】
  12. OpenCV——颜色缩减、计时函数、访问像素
  13. #C++初学记录(sort函数)
  14. Android开发系列(十七):读取assets文件夹下的数据库文件
  15. ipad safari 滚动(overflow)解决方案
  16. 20155210潘滢昊 2016-2017-2 《Java程序设计》第4周学习总结
  17. zabbix安装配置(2.4.5)
  18. SQL Loader with utf8
  19. linq使用 count与sum等
  20. javascript 数组中出现的次数最多的元素

热门文章

  1. python3全方位教程
  2. Java微信小程序开发_00_资源帖
  3. MessFormat的简单使用
  4. leetcode 34 Search for a Range(二分法)
  5. ACM学习历程—BZOJ 2115 Xor(dfs &amp;&amp; 独立回路 &amp;&amp; xor高斯消元)
  6. 经过一年时间的沉淀 再次回首 TCP Socket服务器编程 (二)
  7. AD9各种布线总结
  8. Random获取不重复随机数
  9. 基于STM32的三轴数字罗盘HMC5883L模块的测试
  10. 2.JasperReports学习笔记2-创建简单的报表例子