时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:5615

解决:2668

题目描述:
    给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20。现在增加一个要求,即还需要输出该子序列的第一个和最后一个元素。
输入:

测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( K< 10000 ),第2行给出K个整数,中间用空格分隔。当K为0时,输入结束,该用例不被处理。

输出:

对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。

样例输入:
  1. 6
  2. -2 11 -4 13 -5 -2
  3. 10
  4. -10 1 2 3 4 -5 -23 3 7 -21
  5. 6
  6. 5 -8 3 2 5 0
  7. 1
  8. 10
  9. 3
  10. -1 -5 -2
  11. 3
  12. -1 0 -2
  13. 0
样例输出:
  1. 20 11 13
  2. 10 1 4
  3. 10 3 5
  4. 10 10 10
  5. 0 -1 -2
  6. 0 0 0
来源:
2005年浙江大学计算机及软件工程研究生机试真题

思路:

最基本的动态规划题,算法复杂度O(N)。

代码:

  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int n;
  6. long long a[1000000];
  7. int i;
  8. long long best, bestTmp;
  9. long long bestL, bestR, bestTmpL, bestTmpR;
  10.  
  11. while (scanf("%d", &n) != EOF)
  12. {
  13. if (n == 0)
  14. break;
  15. for (i=0; i<n; i++)
  16. scanf("%lld", &a[i]);
  17.  
  18. best = bestL = bestR = a[0];
  19. bestTmp = bestTmpL = bestTmpR = a[0];
  20. for (i=1; i<n; i++)
  21. {
  22. if (bestTmp < 0)
  23. bestTmp = bestTmpL = bestTmpR = a[i];
  24. else
  25. {
  26. bestTmp += a[i];
  27. bestTmpR = a[i];
  28. }
  29. if (bestTmp > best)
  30. {
  31. best = bestTmp;
  32. bestL = bestTmpL;
  33. bestR = bestTmpR;
  34. }
  35. }
  36.  
  37. printf("%lld %lld %lld\n", best, bestL, bestR);
  38. }
  39.  
  40. return 0;
  41. }
  42. /**************************************************************
  43. Problem: 1011
  44. User: liangrx06
  45. Language: C
  46. Result: Accepted
  47. Time:20 ms
  48. Memory:8648 kb
  49. ****************************************************************/

九度OJ 1011:最大连续子序列 (DP)的更多相关文章

  1. [九度OJ]1011.最大连续子序列

    原题链接:http://ac.jobdu.com/problem.php?pid=1011 题目描述:     给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ N ...

  2. 九度OJ 1501 最大连续子序列乘积 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1501 题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 输入: 输入可能包含 ...

  3. 九度OJ 1011 最长子串

    #include <iostream> #include <string> #include <sstream> #include <math.h> u ...

  4. 九度oj 1011

    题目描述:     给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= ...

  5. 九度OJ 1480 最大上升子序列和 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1480 题目描述: 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列 ...

  6. 九度OJ 1082:代理服务器 (DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1871 解决:574 题目描述: 使用代理服务器能够在一定程度上隐藏客户端信息,从而保护用户在互联网上的隐私.我们知道n个代理服务器的IP地 ...

  7. 九度OJ 1091:棋盘游戏 (DP、BFS、DFS、剪枝)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1497 解决:406 题目描述: 有一个6*6的棋盘,每个棋盘上都有一个数值,现在又一个起始位置和终止位置,请找出一个从起始位置到终止位置代 ...

  8. 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)

    题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...

  9. 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...

随机推荐

  1. 用chardet判断字符编码的方法

    转自http://www.cnblogs.com/xiaowuyi/archive/2012/03/09/2387173.html 用chardet判断字符编码的方法   1.chardet下载与安装 ...

  2. 1219 骑士游历(棋盘DP)

    1997年  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解    题目描述 Description 设有一个n*m的棋盘(2≤n≤50,2≤m≤50),如 ...

  3. linux svn co 重新迁出

    在linux环境下,使用svn co (即svn checkout) 报svn: Authorization failed错误, 使用svn co svn://localhost/temp.cc /d ...

  4. django常用第三方app大全

    djangoapp 资源大全 最近经常在这个版面看到Django相关扩展的介绍,而其一个扩展写一个帖子,觉得没太必要吧. 以前整理的django资源列表,从我的wiki上转过来的. 要找django资 ...

  5. 从数据库中选取数据形成select标签

    添加文章时用代码如下: <select name="NClass" id="NClass" class="sel"> <? ...

  6. DevExpress控件之TreeList

    基于v18.1 使用AppendNode方法手动赋值时,首先要添加treeListColumn 默认样式                                     修改后的样式   1 ...

  7. Smart Battery Specification Revision 1.1

    1.SBS Specifications 2.System Management Bus (SMBus) Specification

  8. 字符串== equals

    经常碰到比较字符串的题, eg: public class StringDemo{ private static final String MESSAGE = "taobao"; ...

  9. phpQuery—基于jQuery的PHP实现(转)

    Query的选择器之强大是有目共睹的,phpQuery 让php也拥有了这样的能力,它就相当于服务端的jQuery. 先来看看官方简介: phpQuery is a server-side, chai ...

  10. 给定一个递增序列,a1 <a2 <...<an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤i<n),现在要从a2 ,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小是多少?

    // ConsoleApplication5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<vector> ...