//方法一:利用动态规划方法
#include<iostream>
using namespace std;
int main()
{
int N;
long long int *a;
while (cin >> N)
{
a = new long long int[N];
long long int maxSum = LLONG_MIN;
long long int sum = 0;
for (int i = 0; i < N; i++)
{
cin >> a[i];
if (sum > 0)
sum += a[i];
else
sum = a[i];
if (sum > maxSum)
maxSum = sum;
}
cout << maxSum << endl;
delete[] a;
}
//system("pause");
return 0;
}
//方法二:利用遍历方法
#include<iostream>
using namespace std;
int main()
{
int N;
long long int *a;
while (cin >> N)
{
a = new long long int[N];
for (int i = 0; i < N; i++)
cin >> a[i];
long long int maxSum = a[0];
long long int sum;
for (int i = 0; i < N; i++)
{
sum = 0;
for (int j = i; j < N; j++)
{
sum += a[j];
if (sum > maxSum)
maxSum = sum;
}
}
cout << maxSum << endl;
delete[] a;
}
//system("pause");
return 0;
}
注意:遍历方法可能会超时,时间复杂度为O(N^2),动态规划方法时间复杂度为O(N)
OJ例题:http://ac.jobdu.com/problem.php?pid=1077