文章
74
粉丝
0
获赞
94
访问
8.2k
#include<bits/stdc++.h>
using namespace std;
int dp[100 + 5]; // 以a[i]结尾的最大连续子串值,必须包括a[i]
int a[100 + 5];
long long maxx;
int main(){
int n;
while(cin >> n){
for(int i = 0; i < n; i ++) cin >> a[i];
dp[0] = a[0];
maxx = dp[0];
int st = 0, en = 0, flag = 0; // st为最大连续子串的开始下标,en为结束下标,flag为dp[i]的st
for(int i = 1; i < n; i ++){
// dp部分
if(dp[i - 1] < 0) {
flag = i;
dp[i] = a[i];
} else dp[i] = a[i] + dp[i - 1];
if(maxx < dp[i]){
maxx = dp[i];
st = flag;
en = i;
}
}
if(maxx >= 0) {
for(int i = st; i <= en; i ++) cout << a[i] << ' ';
} else {
maxx == 0;
}
cout << '\n' << maxx << endl;
}
return 0;
}
登录后发布评论
暂无评论,来抢沙发