码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划 1235: 最大连续子序列

时间:2015-10-29 11:11:50      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
int arry[n],dp[n];
for(int i=0; i<n; i++)
scanf("%d",&arry[i]);
dp[0]=arry[0];
int max1=arry[0],end1=0,start=0,start1=0;
for(int i=1; i<n; i++)
{
dp[i]=max(dp[i-1]+arry[i],arry[i]);//动态转移方程
if( dp[i-1]+arry[i]<arry[i])start=i;//如果当前子序列的和小于当前值时更新起点位置不能用(dp[i]==arry[i])可能会有dp[i-1]+arry[i]==arry[i]的情况
if(max1<dp[i])
{
max1=dp[i];//获取最大的子序列和
end1=i;//更新末尾位置
start1=start;//更新起点位置!!!!注意这点,此时也要更新否则错误
}
}
if(max1>=0)
printf("%d %d %d\n",max1,arry[start1],arry[end1]);
else printf("0 %d %d\n", arry[0],arry[n-1]);
}
return 0;
}

动态规划 1235: 最大连续子序列

标签:

原文地址:http://www.cnblogs.com/aaaadengchaochao/p/4919652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!