HDU1231 最长连续子序列
最大连续子序列
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 31687 Accepted Submission(s): 14214
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
-2 11 -4 13 -5 -2
10
-10 1 2 3 4 -5 -23 3 7 -21
6
5 -8 3 2 5 0
1
10
3
-1 -5 -2
3
-1 0 -2
0
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int MAX=10001; int main()
{
int a[MAX];
int n;
while(scanf("%d",&n)!=EOF&&n)
{
int flag; //表示以当前元素为结尾的 "和(cnt)最大" 的子序列起点。
int cnt; //表示以当前元素为结尾的 "和(cnt)最大" 的子序列 的 "和"。
int mmax; //用来更新 包括当前元素在内的 以及之前的 所有子序列的最大和。
int s,e; //s表示所求序列起点,e表示所求序列终点,下面初始化的时候让s=e=a[0],然后逐步更新s,e。
for(int i=0;i<n;i++)
{
cin>>a[i];
}
cnt=0;
mmax=a[0];
s=e=a[0];
flag=a[0];
for(int i=0;i<n;i++)
{
if(cnt<0) //如果cnt<0,以当前元素为起点构成新的序列
{
cnt=a[i]; //
flag=a[i]; //设置起点
}
else
{
cnt+=a[i];
} if(mmax<cnt) //更新所求最大值
{
mmax=cnt;
s=flag; //设置所求序列起点
e=a[i]; //设置所求序列终点
}
}
if(mmax<0)
{
cout<<0<<" "<<a[0]<<" "<<a[n-1]<<endl;
continue;
}
else
{
cout<<mmax<<" "<<s<<" "<<e<<endl;
} }
return 0;
}
HDU1231 最长连续子序列的更多相关文章
- hdu1231 最长连续子序列和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, N ...
- TOJ 5065: 最长连续子序列
5065: 最长连续子序列 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 140 ...
- 【TOJ 5065】最长连续子序列(前缀和)
Description 给定一系列非负整数,求最长的连续子序列,使其和是7的倍数. Input 第一行为正整数N(1<=N<=50000),接下来有N行,每行有一个非负整数,所有整数不大于 ...
- 最长连续子序列 Longest Consecutive Sequence
2018-11-25 16:28:09 问题描述: 问题求解: 方法一.如果不要求是线性时间的话,其实可以很直观的先排序在遍历一遍就可以得到答案,但是这里明确要求是O(n)的时间复杂度,那么就给了一个 ...
- POJ2479(最长连续子序列和)
Maximum sum Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37035 Accepted: 11551 Des ...
- leetcode 128. 最长连续子序列
题目描述: 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入:[100, 4, 200, 1, 3, 2] 输出:4 即最长的连续序列为 [1,2, ...
- 最长连续子序列(dp,分而治之递归)
5227: 最大子列和问题 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 总提交: 76 测试通过:46 描述 给定KK个整数组 ...
- HDU 3308 线段树单点更新+区间查找最长连续子序列
LCIS Time Limit: 6000/2000 MS (Java/Oth ...
- BNUOJ 4215 最长公共连续子序列
最长公共连续子序列 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class ...
随机推荐
- spring rest docs自定义代码片段
Spring rest docs 文档插件在生成文档时会默认生成6个代码片段,自适应生成其它片段.通过阅读官方文档发现其可以自定义生成的代码片段,但是官方只说了可以自定义模版,修改现有的代码片段的方法 ...
- Python笔记21-------浅复制和深复制、赋值
上面图表示浅复制和深复制,针对顶层对象来说,赋值为引用,浅复制和深复制都是复制一个新的对象. 针对子对象来说,浅复制为引用.深复制就是复制两个一样的. 1.赋值 A= [ 1,2,3, [ 'a',' ...
- 自动化测试之firebug、firepath、IDE的使用
1firebug安装-firefox添加组件-firebug 如图 firepath依赖于firebug 展示路径用,安装和firebug一样
- BZOJ 3878 [AHOI&JSOI2014]奇怪的计算器 (线段树)
题面:BZOJ传送门 洛谷传送门 线段树好题 题目保证$a$一定是正整数,容易发现计算结果是单调的 我们把询问离线,并按照从小到大排序 某次操作可能导致某些位置达到边界$L/R$ 根据单调性的结论 这 ...
- js严格模式下判断数据类型
function isType(type) { return function (content) { let t = Object.prototype.toString.call(content). ...
- jenkins 自动化部署
Execute shell Command BUILD_ID=DONTKILLMEif [ ! -d "/usr/jenkins/$JOB_NAME" ]; then mkdir ...
- selenium+java实现浏览器前进、后退和刷新
- Ajax发送简单请求案例
所谓简单请求,是指不包含任何参数的请求.这种请求通常用于自动刷新的应用,例如证券交易所的实时信息发送.这种请求通常用于公告性质的响应,公告性质的响应无需客户端的任何请求参数,而是由服务器根据业务数据自 ...
- HDU 4353
利用分式的性质可以很容易证明要求的是个三角形,这很简单.对于求三角形内的雷的个数,只需求出每条边上方有多少个雷,作一点运算即可.如 A,B,C(B是X轴坐标在中间的点),则AC(其上方的雷的个数)-A ...
- [Angular] Service Worker Version Management
If our PWA application has a new version including some fixes and new features. By default, when you ...