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

HDU 1231 最大连续子序列 DP题解

时间:2014-08-12 22:04:14      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:for   ar   amp   on   sp   dp   return   hdu   

典型的DP题目,增加一个额外要求,输出子序列的开始和结尾的数值。

增加一个记录方法,nothing special。

记录最终ans的时候,同时记录开始和结尾下标;

更新当前最大值sum的时候,更新开始节点。

const int MAX_N = 10001;
long long arr[MAX_N];
int N, sta, end;

long long getMaxSubs()
{
	long long sum = 0, ans = LLONG_MIN;
	int ts = 0;
	for (int i = 0; i < N; i++)
	{
		sum += arr[i];
		if (ans < sum)
		{
			ans = sum;
			end = i;
			sta = ts;
		}
		if (sum < 0)
		{
			sum = 0;
			ts = i+1;
		}
	}
	return ans;
}

int main()
{
	while (~scanf("%d", &N) && N)
	{
		for (int i = 0; i < N; i++)
		{
			scanf("%I64d", arr+i);
		}
		long long ans = getMaxSubs();
		if (ans < 0ll)
		{
			printf("%d %I64d %I64d\n", 0, arr[0], arr[N-1]);
		}
		else
		{
			printf("%I64d %I64d %I64d\n", ans, arr[sta], arr[end]);
		}
	}
	return 0;
}


\

HDU 1231 最大连续子序列 DP题解,布布扣,bubuko.com

HDU 1231 最大连续子序列 DP题解

标签:for   ar   amp   on   sp   dp   return   hdu   

原文地址:http://blog.csdn.net/kenden23/article/details/38521757

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