很巧妙的解决方法,也不是什么动态规划,只要想明白了这种子数组的出现规律就很好明白。

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);
}