结果序列和在范围(-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);
}
}
京公网安备 11010502036488号