关键公式dp[i]=max(dp[i-1]+list[i], list[i])表示至少包含i在内的和最大的子式。
#include <bits/stdc++.h>
using namespace std;
// dp[i][j]=dp[0][j]-dp[0][i];
int main() {
int N;
// 1~i存数据
vector<long long> list;
// dp[i]:1~i求和。
vector<long long> dp;
while(cin>> N) {
list.clear();
dp.clear();
list.push_back(0);
dp.push_back(0);
// 输入
long long temp;
for(int i=0; i<N; i++) {
cin>> temp;
list.push_back(temp);
}
// 选择前i项和或list[i]
long long res=list[1];
for(int i=1; i<=N; i++) {
dp.push_back(max(dp[i-1]+list[i], list[i]));
res=max(res, dp[i]);
}
cout<< res<< endl;
}
}
// 64 位输出请用 printf("%lld")

京公网安备 11010502036488号