HDU 1231 最大连续子序列

/*
给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ...,
Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,
例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20
状态转移方程 dp[i] = max(dp[i - 1] + a[i],a[i])
最长公共子序列 求出最长的起点 和 终点
*/
#include
<stdio.h>
int main(){
int i,start,end,maxsum,n,input,sum,sumstart,sumend;
int first,last;
while(scanf("%d",&n), n){
sum
= 0;
start
= end = 0;
maxsum
= -32768;
for(i = 0; i < n; i++){
scanf(
"%d",&input);
if(i == 0){
first
= input;
}
else if(i == n - 1){
last
= input;
}
if(sum >= 0){
if(i == 0)
start
= input;
sum
+= input;
end
= input;
}
else {
sum
= input;
start
= end = input;
}
if( maxsum < sum ){
maxsum
= sum;
sumstart
= start;
sumend
= end;
}
}
if(maxsum >= 0 )
printf(
"%d %d %d\n",maxsum,sumstart,sumend);
else
printf(
"%d %d %d\n",0,first,end);
}
  
return 0;
}
posted @ 2011-04-09 02:09  L..  阅读(337)  评论(0编辑  收藏  举报