最大子数组和

一看到这个问题第一反应就是最最普通的三个for循环三层遍历,求出数组中每一个子数组的和,最终求出这些子数组的最大的一个值。
记Sum[i, …, j]为数组A中第i个元素到第j个元素的和(其中0 <= i <= j < n),遍历所有可能的Sum[i, …, j],那么时间复杂度为O(N^3)

但是老师和同学介绍使用动态规划,恍然大悟

github不知为什么安不上代码贴出求助教协助~

#include<stdio.h>
int main()
{
int sum=-10000,a[1000],s[1000],i=0,j=0,k=0,n;
char x;
while(1)
{
scanf("%d%c",&a[i++],&x);
if(x==' ')break;
}
n=i;
s[0]=a[0];
for(i=1;i<n;i++)
{
if(s[i-1]>0)
{
s[i]=s[i-1]+a[i];
k=i;
}
else{
s[i]=a[i];
j=i;
k=i;
}
}
for(i=0;i<n;i++)
if(sum<s[i])sum=s[i];
printf("sum=%d ",sum);
return 0;
}

原文地址:https://www.cnblogs.com/fireyjy/p/3330305.html