设为首页 加入收藏

TOP

HDU 1231 最大连续子序列 DP题解
2015-07-20 17:55:51 来源: 作者: 【 】 浏览:2
Tags:HDU 1231 最大 连续 序列 题解

典型的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;
}


\

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU4944-FSF’s game(递推) 下一篇HDU 1828 && POJ 1177 Pi..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: