69,371
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include "windows.h"
int max1(int x,int y)
{
return (x>y)?x:y;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[]={3,2,-1,2,2};
int n=5, i;
int start[5],all[5];
start[n-1]=a[n-1];
all[n-1]=a[n-1];
for(i=n-2;i>=0;i--) {
start[i] = max1(a[i],a[i]+start[i+1]);
all[i] = max1(start[i],all[i+1]);
}
for(i=0;i<n;i++) printf("%d ",start[i]);
printf("\n");
for(i=0;i<n;i++) printf("%d ",all[i]);
printf("\n");
system("pause");
return 0;
}
#include<stdio.h>
int MaxSum2(int *A, int n)
{
int nStart = A[n-1];
int nAll = A[n-1];
int i ;
for(i = n-2;i>=0;--i)
{
if(nStart<0)
nStart = 0;
nStart += A[i];
if(nStart>=nAll)
{
nAll = nStart;
}
}
return nAll;
}
int main()
{
int a[]={3,2,-1,2,2};
int n=5, i;
int start[5],all[5];
printf("result: %d\n", MaxSum2(a, 5));
return 0;
}
这里有另外一个代码,你可以参考对比一下,答案是一样的