求最大连续子段和 的 dp算法
2010-08-03 16:42
330 查看
问题描述:
有n个数(以下都视为整数),每个数有正有负,现在要在n个数中选取相邻的一段,使其和最大,输出最大的和。
问题分析:
看到这个问题,它是属于带“最”字的问题,其实就是一个求最优解的问题。最先想到的就是要动态规划。
int MaxSub (int a[])//此为只需要求最大的和,时间复杂度是O(n)
{
int dp
, max, i;
max = dp[0] = a[0];
for (i=1; i<N; i++)
{
if (dp[i-1] > 0)
dp[i] = dp[i-1] + a[i];
else
dp[i] = a[i];
if (dp[i] > max)
max = dp[i];
}
return max;
}
有n个数(以下都视为整数),每个数有正有负,现在要在n个数中选取相邻的一段,使其和最大,输出最大的和。
问题分析:
看到这个问题,它是属于带“最”字的问题,其实就是一个求最优解的问题。最先想到的就是要动态规划。
int MaxSub (int a[])//此为只需要求最大的和,时间复杂度是O(n)
{
int dp
, max, i;
max = dp[0] = a[0];
for (i=1; i<N; i++)
{
if (dp[i-1] > 0)
dp[i] = dp[i-1] + a[i];
else
dp[i] = a[i];
if (dp[i] > max)
max = dp[i];
}
return max;
}
相关文章推荐
- 求最大连续子段和 的 dp算法
- 求最大连续子段和 的 dp算法
- Codeforces Round #407 (Div. 2) C. Functions again(最大连续子段和)
- 线段树+DP 求区间连续最大子段和 hoj Candy
- HDU1087 Super Jumping! Jumping! Jumping! 最大连续递增子段
- 最大可不连续的子段和(1087)
- spoj 1716...动态区间的最大连续子段和问题...点修改...
- hdu2845_最大不连续子段和
- POJ-2479 Maximum sum (不连续的最大子段和)
- 最大子段连续积
- tyvj 1305 最大m子段和 单调队列 求连续l(1<=l<=k)个数的和的最大值 数列不可循环
- 最大连续子段和
- 数组的连续最大子段和
- POJ-2593 Max Sequence(不连续的最大子段和)
- HDU - 1003 Max Sum(最大连续子段和)
- NOJ 2045 罗马PK (线性dp 最大连续子段和)
- poj 2479 最大连续子段和 dp算法
- POJ 2593 Max Sequence POJ 2479 Maximum sum (线性dp 最大连续两不重叠子段和)
- gym101138J(树链剖分,线段树维护区间连续子段最大和,好题)
- 最大子段-n个数求和最大且连续的子段-最简单的一维dp,动态规划入门教程,包听懂