没看清题目要求,数字全<0时输出0 0 N-1
maxEnd在每次重新开始时更新即可
maxStart不好记录,倒推即可
#include<iostream>
#include<climits>
#include<math.h>
using namespace std;
int main(){
int K;
int data[10000];
int dp[10000];
while(cin>>K){
if(K==0) break;
cin>>data[0];
dp[0] = data[0];
long long maxSum = dp[0];
int maxEnd = 0;
for(int i=1;i<K;i++){
cin>>data[i];
int continuePut = dp[i-1]+data[i];
if(continuePut>data[i]){
dp[i] = continuePut;
} else {
dp[i] = data[i];
}
if(dp[i]>maxSum){
maxSum=dp[i];
maxEnd = i;
}
}
int maxStart = maxEnd;
int counter = maxSum;
for(int i=maxEnd;i>=0;i--){
counter-=data[i];
if(counter==0){
maxStart = i;
break;
}
}
if(maxSum<0){
maxSum=0;
maxStart = 0;
maxEnd = K-1;
}
cout<<maxSum<<" "<<data[maxStart]<<" "<<data[maxEnd]<<" "<<endl;
}
return 0;
}

京公网安备 11010502036488号