问题描述:
有n个数(以下都视为整数),每个数有正有负,现在要在n个数中选取相邻的一段,使其和最大,输出最大的和。
问题分析:
看到这个问题,它是属于带“最”字的问题,其实就是一个求最优解的问题。最先想到的就是要动态规划。
int MaxSub (int a[])//此为只需要求最大的和,时间复杂度是O(n)
{
int dp[N], 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;
}