结果序列和在范围(-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); } }