//方法一:利用動態規劃方法
#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