HDU 1231 最大连续子序列 (动态规划)

最大连续子序列

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 43843    Accepted Submission(s): 20002

 

Problem Description

 

给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。

 


Input

 

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

 


Output

 

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

 


6
-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

Sample Output

20 11 13
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0Hint
HintHuge input, scanf is recommended.

题目分析

连DP数组都不需要,只需要一个数sum记录当前连续子序列的和即可,如果sum<0,代表当前子序列对于此后的元素都没有意义,更新sum,然后判断与是否是最大值,如果是最大值就更新记录的区间下标即可。需要注意的题目要求:若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。

代码

#include<bits/stdc++.h>using namespace std;int anss,sum,l,r,anssl,anssr,i,n,a[10005];int main()
{while(scanf("%d",&n),n!=0){for(i=1;i<=n;i++){scanf("%d",&a[i]);}sum=a[1];l=1;r=1;anssl=1;anssr=1;anss=a[1];for(i=2;i<=n;i++){if(sum<0){sum=a[i];l=i;r=i;}else{sum+=a[i];r++;}if(sum>anss){anss=sum;anssl=l;anssr=r;}}if(anss<0){printf("0 %d %d\n",a[1],a[n]);}else{printf("%d %d %d\n",anss,a[anssl],a[anssr]);}}
}

 

 

转载于:https://www.cnblogs.com/dyhaohaoxuexi/p/11432844.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shiro学习(23):动态添加验证规则3

工具idea 先看看数据库 shiro_role_permission 数据 shiro_user shiro_user_role 数据 目录结构 在pom.xml里面添加 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http…

借助实时数据推送快速制作在线对战五子棋小游戏丨实战

1 项目概述 游戏开发&#xff0c;尤其是微信小游戏开发&#xff0c;是最近几年比较热门的话题。 本次「云开发」公开课&#xff0c;将通过实战「在线对战五子棋」&#xff0c;一步步带领大家&#xff0c;在不借助后端的情况下&#xff0c;利用「小程序 ✖ 云开发」&#xff0c;…

关于时间复杂度和空间复杂度的计算

转:https://blog.csdn.net/mr_garfield__/article/details/78762478 时间复杂度&#xff1a; 一般情况下&#xff0c;算法中基本操作重复的次数就是问题规模n的某个函数f&#xff08;n&#xff09;&#xff0c;进而分析f&#xff08;n&#xff09;随n的变化情况并确定T&#…

glomosim仿真的运行过程

1 glomosim系统启动的入口是.\main\driver.pc文件中的main()函数。main()函数首先调用parsec_main()函数。parsec_main()函数是parsec运行库函数&#xff0c;我们看不到它的源代码。 2 parsec系统的入口是driver实体。parsec系统启动时首先执行driver实体的代码。driver实体首先…

shiro学习(24):Spring的transaction-manager的用法

<?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:tx"http://www.springframework.org/sche…

Spring Boot----SpringBoot整合 Dubbo 和 Zookeeper

下载安装Zookeeper linux 使用docker部署 windows:参考&#xff08;https://blog.csdn.net/ring300/article/details/80446918&#xff09;&#xff0c;下载的zookeeper目录中需要包含lib&#xff08;内置jar包&#xff0c;否则需要自己导入&#xff09; 1、将conf目录下的zoo_…

visual studio 2005 sp1 安装错误解决

要解决此问题, 请按照下列步骤&#xff1a; 1. 单击 开始 单击 运行 &#xff0c; 键入 控件 secpol.msc , 然后单击 确定 。 2. 双击 本地安全策略 。 3. 单击 软件限制策略 。 注意 如果列出, 没有软件限制右键单击 软件限制策略 , 然后单击 新建策略 。 4. 在 对象类…

递归树求解递归算法的时间复杂度

递归算法时间复杂度的计算方程式一个递归方程&#xff1a; 在引入递归树之前可以考虑一个例子&#xff1a; T(n) 2T(n/2) n2 迭代2次可以得&#xff1a; T(n) n2 2(2T(n/4) (n/2) 2) 还可以继续迭代&#xff0c;将其完全展开可得&#xff1a; T(n) n2 2((n/2) 2 2((n/2…

git(4):git安装教程

1首先找到我们下载好的安装包 2打开安装包 3点击next 4点击next 5点击next 6 点击next 7点击next

基于Cairngorm的Silverlight开发 - part3

使用ModelLocator来管理视图 之前只是简单的介绍了一下ModelLocator的用法&#xff0c;在这里要把模型和视图结合起来&#xff0c;通过模型来来控制视图。在Silverlight中我们可以看到所有新建立的xaml都是继承自UserControl&#xff0c;所以在这里更新欢称视图为控件。至此给出…

时间复杂度空间复杂度分析

转发:https://blog.csdn.net/LF_2016/article/details/52453212 时间复杂度&#xff1a; 一般情况下&#xff0c;算法中基本操作重复执行的次数是问题规模n的某个函数f(n)&#xff0c;进而分析f(n)随n的变化情况并确定T(n)的数量级。这里用"O"来表示数量级&#xff…

HDU 1284 钱币兑换问题 (动态规划 背包方案数)

钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15134 Accepted Submission(s): 9117 Problem Description 在一个国家仅有1分&#xff0c;2分&#xff0c;3分硬币&#xff0c;将钱N兑换成硬币有很…

github(5):GitHub的注册与使用(详细图解)

首先,你需要注册一个 github账号,最好取一个有意义的名字&#xff0c;比如姓名全拼&#xff0c;昵称全拼&#xff0c;如果被占用&#xff0c;可以加上有意义的数字. 本文中假设用户名为 chuaaqiCSDN(我的博客名的全拼) 一、gihub账号注册与仓库创建 1. 注册账号: 地址: https…

Hive分区和桶的概念

Hive 已是目前业界最为通用、廉价的构建大数据时代数据仓库的解决方案了&#xff0c;虽然也有 Impala 等后起之秀&#xff0c;但目前从功能、稳定性等方面来说&#xff0c;Hive 的地位尚不可撼动。 其实这篇博文主要是想聊聊 SMB join 的&#xff0c;Join 是整个 MR/Hive 最为…

git学习(6):删除github镜像

怎样删除GitHub上的项目 第一步&#xff1a;双击GitHub的项目workhard(举例) 第二步&#xff1a;确认项目可以删除&#xff0c;双击settings 第三步&#xff1a;找到 Delete this repository按钮并单击 第四步&#xff1a;在弹出的模态框框中输入需要删除的项目名字&#xff…

剧情介绍:“肖申克的救赎”

故事发生在1947年&#xff0c;银行家安迪因为妻子有婚外情&#xff0c;用枪杀死了她和她的情人&#xff0c;因此他被指控枪杀了妻子及其情人&#xff0c;安迪被判无期徙刑&#xff0c;这意味着他将在肖恩克监狱中渡过余生。  阿瑞1927年因谋杀罪被判无期徙刑&#xff0c;数次…

Spring Boot----Dubbo

概述 治理和维护各个分系统 参考官网&#xff1a;http://dubbo.apache.org/zh-cn/docs/user/references/registry/introduction.html &#xff08;可中英文切换&#xff09; 下载安装Zookeeper linux 使用docker部署 windows: 参考&#xff08;https://blog.csdn.net/ring300/a…

hadoop join

在介绍这个实例之前&#xff0c;请各位参考&#xff1a;http://bjyjtdj.iteye.com/blog/1453410。 reduce side join是一种最简单的join方式&#xff0c;其主要思想如下&#xff1a; 在map阶段&#xff0c;map函数同时读取两个文件File1和File2&#xff0c;为了区分两种来源的…

git学习(8):windows系统下VI编辑器的基本使用

vi编辑器是Linux系统下标准的编辑器.而且不逊色于其他任何最新的编辑器.但是在windows系统中如何使用VI编辑器呢&#xff1f; 下面给大家介绍在git环境下的vi编辑器的简单用法和部分命令. 工具原料&#xff1a;git2.7.2, 下载地址&#xff1a;https://git-for-windows.githu…

BUUOJ misc 二维码

一个二维码&#xff0c;扫一下是提示&#xff1a;secret is here 用binwalk看一下&#xff1a; binwalk QR_code.pngDECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 …