ACM_HDU 1231 最大连续子序列 (dp)_代码分析
Problem Description
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。
Input
Output
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
Sample Input
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 0
#include <stdio.h>
#define MAXN 10005
int array[MAXN];
int dp[MAXN];
int main()
{
int n, start, end, submax, left, i;
/********start是最大子区间起点值,end为终点值。
*********submax是以array[i]为最右值的最大连续
*********子区间的值,left是这个子区间的起点值。***/
while ( scanf("%d",&n) && n != )
{
for ( i = ; i < n; i++ )
scanf("%d",&array[i]);
dp[] = submax = array[];//用于初始化
start = end = array[];
for ( i = ; i < n; i++ )//遍历数组
{/******如果当前的这个数,比之前加起来的再起上自己本身还要多,
****则用这个数作为起点,并标记为最大值。**************/
if ( array[i] > submax + array[i] )
/****submax/left都是缓存的变量,如果不合适,就会被更新掉即不断累加******/
submax = left = array[i];
/*************否则继续加******************/
else
submax = submax + array[i];
/*************为了与array[i]保持同步更新****
**************关键的是此次累加或比之前都大的数与前一次的最大值相比较,谁大****/
if ( dp[i-] >= submax )
dp[i] = dp[i-];
else
{/***************如果这次大,那么更新***************************/
dp[i] = submax;
end = array[i];
/************left只有在比之前加起来的再起上自己本身还要大时才会赋值,会赋值多次,但是次数有限***************/
start = left;/*************这个left用的很好,请读者仔细想想******************/
}
}
/****************
若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
********************/
if ( dp[n-] < )
dp[n-] = , start = array[], end = array[n-];
printf("%d %d %d\n", dp[n-], start, end );
}
return ;
}
看完了上面的代码分析,再来总结“ 最大连续子序列”几个关键点:
1.当某个数比累加到此数的和还要大时,以此数为起点。
2.当累加到此数的最大和比之前的最大和还要大时,更新起点、最大和、终点。否则最大和及起点、终点值都不变。
3.若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
ACM_HDU 1231 最大连续子序列 (dp)_代码分析的更多相关文章
- HDU 1231.最大连续子序列-dp+位置标记
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- HDU 1003 Max Sum && HDU 1231 最大连续子序列 (DP)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- HDU 1231 最大连续子序列 --- 入门DP
HDU 1231 题目大意以及解题思路见: HDU 1003题解,此题和HDU 1003只是记录的信息不同,处理完全相同. /* HDU 1231 最大连续子序列 --- 入门DP */ #inclu ...
- 【ACM】 1231 最大连续子序列
[1231 最大连续子序列 ** Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- HDU 1231——最大连续子序列(DP)
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- DP专题训练之HDU 1231 最大连续子序列
Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j < ...
- HDU 1231 最大连续子序列 &&HDU 1003Max Sum (区间dp问题)
C - 最大连续子序列 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...
- HDU 1231 最大连续子序列:水dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231 题意: 给你一个整数序列,求连续子序列元素之和最大,并输出该序列的首尾元素(若不唯一,输出首坐标 ...
- HDU 1231 最大连续子序列 (dp)
题目链接 Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= ...
随机推荐
- jquery + ajax调用后台方法
前台js: var parameter = ""; $.ajax({ type: "POST", //提交方式 url: "Default.aspx/ ...
- 红豆带你从零学C#系列之:开始C#编程(二)
控制台程序开发之补充说明 你已经动手操作过我们上一篇文章中的控制台程序输入输出了吗朋友? 如果没有的话,强烈建议你先回去做一遍再来继续学习噢!上一篇文章地址:点击这里 一. 你问我答 问:代码是 ...
- textContent和innerHtml
textContent,innerText, 查询或者设置元素的文本内容. textContent如,html: <p>test gogo</p> javascript中: v ...
- BZOJ 2946: [Poi2000]公共串( 后缀自动机 )
一个串建后缀自动机, 其他串在上面跑, 然后用当前串跑的去更新全部 ------------------------------------------------------------------ ...
- jquery中的uploadfile关于图片上上传的插件的应用
ajaxFileUpload是一个异步上传文件的jQuery插件. 传一个不知道什么版本的上来,以后不用到处找了. 语法:$.ajaxFileUpload([options]) options参数说明 ...
- Android 逆向工程之步骤
PS:本系列文章中所涉及到的技术.数据和接口地址,仅供学习交流,务必不可做坏事或者是用于商业用途!否则后果自负! 来源:http://blog.csdn.net/zhaokaiqiang1992 逆向 ...
- 移动端的click
移动端的click 移动端click和touch的关系 搬运 http://segmentfault.com/q/1010000000691822 手指在屏幕上滑动时 各个touch的触发顺序 tou ...
- 5_Navigation Bar
5 // // ViewController.swift // Navigation Bar // // Created by ZC on 16/1/9. // Copyright © 2016年 Z ...
- Windows Azure 虚拟网络中虚拟机的网络隔离选项
最近我们发布了一份<Windows网络安全白皮书>(单击此处下载),文中深入说明了客户可以如何利用该平台的本地功能,为他们的信息资产提供最好的保护. 由首席顾问Walter Myer ...
- jQuery中on()方法用法实例详解
这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能及各种常见的使用技巧,并对比分析了与bind(),live(),delegate()等方法的区别,需要的朋友可以参考下 本 ...