题意:给出n个数,求最大连续的子区间和,并且输出该区间的第一个和最后一个数。

如果所有数都小于0,那么则输出0,第一个数和最后一个数。

看数据k的范围,就知道肯定不能两层for循环来求区间和,O(n^2)的复杂度肯定超时
所以这里肯定要求一遍for循环就能知道结果
定义区间l和r,sum为目前[l,r]之间的和
一开始l=r=0,sum=a[0]
接下来,对于当前第i个数字a[i]
如果sum+a[i]>a[i],那么就将a[i]一起加入到区间中去。
如果sum+a[i]<a[i],那么还不如不加,直接重新从a[i]开始,sum=a[i]。
更新对应的区间,顺便比较一下当前的sum和maxsum即可

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string.h>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=+;
int a[maxn];
int maxsum=-INF;
int maxl,maxr;
int l,r;
int main()
{
int n,val;
int sum;
scanf("%d",&n);
scanf("%d",&a[]);
sum=a[];
l=;
r=;
maxl=l;
maxr=r;
maxsum=sum;
bool allnegative=true;
if(a[]>=)
allnegative=false;
for(int i=;i<n;i++){
scanf("%d",&a[i]);
if(a[i]>=)
allnegative=false;
//printf("l:%d r:%d sum:%d %d:val\n",l,r,sum,a[i]);
if(sum+a[i]>a[i]){
sum+=a[i];
r++;
if(sum>maxsum){
maxl=l;
maxr=r;
maxsum=sum;
}
}
else{
sum=a[i];
l=r=i;
if(sum>maxsum){
maxl=l;
maxr=r;
maxsum=sum;
}
}
}
//如果都小于0,按照题目要求,输出0,第一个和最后一个数
if(allnegative)
printf("0 %d %d\n",a[],a[n-]);
else
printf("%d %d %d",maxsum,a[maxl],a[maxr]);
return ;
}

PAT甲题题解-1007. Maximum Subsequence Sum (25)-求最大子区间和的更多相关文章

  1. PAT甲题题解-1074. Reversing Linked List (25)-求反向链表

    题意说的很清楚了,这种题的话,做的时候最好就是在纸上自己亲手模拟一下,清楚一下各个指针的情况, 这样写的时候就很清楚各个指针变量保存的是什么值. PS:一次AC哈哈,所以说自己动手在纸上画画还是很有好 ...

  2. PAT甲题题解-1013. Battle Over Cities (25)-求联通分支个数

    题目就是求联通分支个数删除一个点,剩下联通分支个数为cnt,那么需要建立cnt-1边才能把这cnt个联通分支个数求出来怎么求联通分支个数呢可以用并查集,但并查集的话复杂度是O(m*logn*k)我这里 ...

  3. PAT甲题题解-1040. Longest Symmetric String (25)-求最长回文子串

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789177.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  4. PAT甲 1007. Maximum Subsequence Sum (25) 2016-09-09 22:56 41人阅读 评论(0) 收藏

    1007. Maximum Subsequence Sum (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  5. PAT 甲级 1007 Maximum Subsequence Sum (25)(25 分)(0不是负数,水题)

    1007 Maximum Subsequence Sum (25)(25 分) Given a sequence of K integers { N~1~, N~2~, ..., N~K~ }. A ...

  6. 1007 Maximum Subsequence Sum (25分) 求最大连续区间和

    1007 Maximum Subsequence Sum (25分)   Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A ...

  7. 1007 Maximum Subsequence Sum (25 分)

    1007 Maximum Subsequence Sum (25 分)   Given a sequence of K integers { N​1​​, N​2​​, ..., N​K​​ }. A ...

  8. PAT (Advanced Level) 1007. Maximum Subsequence Sum (25) 经典题

    Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...

  9. PAT 解题报告 1007. Maximum Subsequence Sum (25)

    Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...

随机推荐

  1. tcp尽快尽快了

    看的撒积分卡拉斯的放假啊的顺口溜

  2. 【JavaScript】read_line()、print()实现输入输出

    /*输入 输入的第一行为一个正整数T,表示有T组测试数据.随后的T行中,每行为一组测试数据. 每组测试数据包含由3个正整数构成,分别为N.M和a,其中1<=N, M, a <=10^9. ...

  3. 检测QQ在线状态脚本(20141022测试成功)

    import time,datetime import urllib2 def chk_qq(qqnum): chkurl = 'http://wpa.paipai.com/pa?p=1:'+`qqn ...

  4. Android解决自定义View获取不到焦点的情况

    引言: 我们在使用Android View或者SurfaceView进行图形绘制,可以绘制各种各样我们喜欢的图形,然后满怀信心的给我们的View加上onTouchEvent.onKeyDown.onK ...

  5. js 自己项目中几种打开或弹出页面的方法

    自己项目中,几种打开或弹出页面的方法(部分需要特定环境下) var blnTop = false;//是否在顶层显示 ///动态生成模态窗体(通过字符串生成) ///strModalId:模态窗体ID ...

  6. 林帆:Docker运行GUI软件的方法

    继上周的“Kubernetes v1.0特性解析”分享之后,本周我们邀请到ThoughtWorks咨询师林帆为大家带来主题为“Docker运行GUI软件的方法”的分享. 嘉宾简介:林帆,Thought ...

  7. [POI2007]旅游景点atr BZOJ1097

    分析: 我们可以考虑,因为我们必须经过这些节点,那么我们可以将它状压,并且我们因为可以重复走,只是要求停顿前后,不要求遍历前后,那么我们之间存一下点与点之间的最短路,之后每次转移一下就可以了. f[i ...

  8. 2.2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——列表

    也许最常用的Unix命令是ls了,它是'list'的简写(Listing 8) Listing 8 用ls以列表的形式显示文件和目录(内容输出跟各自电脑有关) $ ls Desktop Downloa ...

  9. 大数据入门第二十四天——SparkStreaming(一)入门与示例

    一.概述 1.什么是spark streaming Spark Streaming is an extension of the core Spark API that enables scalabl ...

  10. ASP HUOSHAN VIDEO

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...