描述
代码
#include<bits/stdc++.h>
using namespace std;
#define NUM 1001
int a[NUM];
int MaxSum(int n)
{
int sum=0;
int b=0;
for (int i=1; i<=n; i++)
{
if (b>0)
b+=a[i];
else
b=a[i];
if (b>sum)
sum=b;
}
return sum;
}
int main()
{
int n;
while (cin>>n && n)
{
for (int i=1; i<=n; i++)
cin>>a[i];
cout<< MaxSum(n);
}
return 0;
}
时间复杂度O(n)
求最优解
#include <bits/stdc++.h>
using namespace std;
#define NUM 1001
int a[NUM];
int MaxSum(int n, int &besti, int &bestj)
{
int sum=0;
int b=0;
int begin = 0;
for (int i=1; i<=n; i++)
{
if (b>0)
b+=a[i];
else
{
b=a[i];
begin = i;
}
if (b>sum)
{
sum = b;
besti = begin;
bestj = i;
}
}
return sum;
}
int main()
{
int n;
int besti, bestj;
while (cin>>n && n)
{
besti = 0;
bestj = 0;
for (int i=1; i<=n; i++)
cin>>a[i];
cout<<MaxSum(n, besti, bestj)<<endl;
cout<<"From "<<besti<<" to "<<bestj<<endl;
}
return 0;
}