很巧妙的解决方法,也不是什么动态规划,只要想明白了这种子数组的出现规律就很好明白。
32位int塞不下某些数据,需要用64位long。
#include <vector>
#include <climits>
using namespace std;
int main()
{
int n;
scanf("%ld", &n);
vector<long> arr(n);
for (int i = 0; i < n; i++)
{
scanf("%ld", &arr[i]);
}
long max = 0;
long cur = 0;
for (const long& value: arr)
{
cur = (cur + value > 0 ? cur + value : 0);
max = (cur > max ? cur : max);
}
if (max == 0)
{
max = LONG_MIN;
for (const long& value: arr)
{
max = (max > value ? max : value);
}
}
printf("%ld", max);
}