| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
虽然没有全懂,但还是贴出自己写的ACed代码,仅供参考。#include <iostream>
#include <cstdio>
using namespace std;
//#define DBG
int array[50000];
int sumPre[50000];
int sumSuc[50000];
int maxPre[50000];
int maxSuc[50000];
inline int cal(int *const array, int len)
{
sumPre[0] = array[0];
sumSuc[len - 1] = array[len - 1];
for (int i = 1; i < len; ++i)
{
if (sumPre[i - 1] < 0)
{
sumPre[i] = array[i];
}
else
{
sumPre[i] = array[i] + sumPre[i - 1];
}
}
for (int i = len - 2; i >= 0; --i)
{
if (sumSuc[i + 1] < 0)
{
sumSuc[i] = array[i];
}
else
{
sumSuc[i] = array[i] + sumSuc[i + 1];
}
}
#ifdef DBG
for (int i = 0; i < len; ++i)
{
cout << sumPre[i] << " " ;
}
cout << endl;
for (int i = 0; i < len; ++i)
{
cout << sumSuc[i] << " ";
}
cout << endl;
#endif
maxPre[0] = sumPre[0];
maxSuc[len - 1] = sumSuc[len - 1];
int tmpMax;
tmpMax = sumPre[0];
for (int i = 1; i < len; ++i)
{
if (sumPre[i] > tmpMax)
{
tmpMax = sumPre[i];
}
maxPre[i] = tmpMax;
}
tmpMax = sumSuc[len - 1];
for (int i = len - 2; i >= 0; --i)
{
if (sumSuc[i] > tmpMax)
{
tmpMax = sumSuc[i];
}
maxSuc[i] = tmpMax;
}
#ifdef DBG
for (int i = 0; i < len; ++i)
{
cout << maxPre[i] << " " ;
}
cout << endl;
for (int i = 0; i < len; ++i)
{
cout << maxSuc[i] << " ";
}
cout << endl;
#endif
tmpMax = maxPre[0] + maxSuc[1];
for (int i = 1; i < len - 1; ++i)
{
if (maxPre[i] + maxSuc[i + 1] > tmpMax)
{
tmpMax = maxPre[i] + maxSuc[i + 1];
}
}
return tmpMax;
}
#if 1
int main(void)
{
int count;
int len;
cin >> count;
for (int i = 0; i < count; ++i)
{
cin >> len;
for (int j = 0; j < len; ++j)
{
scanf("%d", &array[j]);
}
cout << cal(array, len) << endl;
}
}
#endif
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator