结果序列和在范围(-2^63,2^63-1)以内。使用longlong

#include <iostream>
#include <cstring>

using namespace std;

const int N = 1000000;

long long dp[N];
long long num[N];

long long func(int n){
    //long long ans = 0; 这里ans不能设为0,因为存在负数值
    long long ans = num[0];
    dp[0] = num[0];
    for(int i = 1; i < n; i++){
        dp[i] = max(num[i], dp[i-1] + num[i]);
        ans = max(ans, dp[i]);
    }
    return ans;
}

int main(){
    int n;
    while(cin >> n){
        for(int i = 0; i < n; i++){
            cin >> num[i];
        }
        memset(dp, 0, sizeof(dp));
        long long ans = func(n);
        printf("%lld\n", ans);
    }
}