hdu 1231 最大连续子序列
来源:互联网 发布:vb的编程机制是 编辑:程序博客网 时间:2024/06/03 19:13
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231
题目描述:
Description
给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和
为20。
在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该
子序列的第一个和最后一个元素。
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,输出整个序列的首尾元素。
素,中间用空格分隔。如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素。
Sample Input
6-2 11 -4 13 -5 -210-10 1 2 3 4 -5 -23 3 7 -2165 -8 3 2 5 01103-1 -5 -23-1 0 -20
Sample Output
20 11 1310 1 410 3 510 10 100 -1 -20 0 0 Huge input, scanf is recommended.
分析:这题如果不限制时间的话那么相信很多人都可以做的出来,3个或两个for循环都可以很简单的做出来,但是考虑到这是一道动态规划的题目,那么按照常规的思路肯定会超时,这里就需要我们换一种思路,只用一个for循环来解决,用l和r来记录符合条件的子序列的左右两端,term变量来记录当前我们正在处理的子序列的最左端,如果我们处理的这个子序列和sum的值>Max的值,那么就把sum的值赋给Max,同时把term的值给l,此时的最右端显然是i,所以把i的值给r,用这种思想,从前往后扫一遍自然就能得到结果(详见代码)。
AC代码:
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;int N[10005],Max,sum,l,r,term,sign,K;int main(){ while(1) { cin>>K; if(K==0) { break; } sign=0; sum=0; Max=-0xffffff; l=1; r=1; term=1; for(int i=1;i<=K;i++) { cin>>N[i]; if(N[i]>=0) { sign=1;//记录是不是全是负数 } sum+=N[i]; if(sum>Max)//sum值大于Max就进行处理 { Max=sum; l=term; r=i; } if(sum<0)//如果sum<0,那么就重新赋初值0,因为一个最大和子序列不可能是从负数开始的 { sum=0; term=i+1;//下一个子序列是从i+1开始的,因为着了的sum值并没有把N[i]记录进去 } } if(sign)//不是是负数 cout<<Max<<" "<<N[l]<<" "<<N[r]<<endl; else//全是负数 cout<<0<<" "<<N[1]<<" "<<N[K]<<endl; } return 0;}
1 0
- hdu 1231 最大连续子序列 【最大连续子串】
- hdu 1231 最大连续子序列
- hdu 1231 最大连续子序列
- hdu 1231 最大连续子序列和
- hdu 1231 最大连续子序列(DP)
- HDU-1231 最大连续子序列
- HDU 1231 最大连续子序列 (dp)
- HDU 1231 最大连续子序列
- hdu 1231最大连续子序列 【DP】
- hdu 1231 最大连续子序列
- hdu 1231 最大连续子序列
- HDU 1231 最大连续子序列
- hdu 1231 最大连续子序列
- hdu 1231 最大连续子序列
- hdu 1231最大连续子序列
- HDU-1231-最大连续子序列
- hdu 1231 最大连续子序列
- hdu 1231 最大连续子序列 (dp)
- POJ 1088 滑雪
- java大数类的应用
- libpng warning: iCCP: known incorrect sRGB profile
- 使用OC加载图片的两种方式及其区别
- 第一次使用Android Studio所遇到的问题
- hdu 1231 最大连续子序列
- 开篇之作
- POJ 3114 强联通分量+最短路
- SNMP协议详解
- UILocalNotification 本地推送 周一到周五重复提醒
- HDU-1166-敌兵布阵【树状数组】
- 小指数rsa 多线程版writeup
- java初始化顺序
- python多进程