原题:
思路:dp
核心代码:
if(num[i] > num[i] + dp[i - 1])
dp[i] = num[i];
else dp[i] = num[i] + dp[i - 1];
if(dp[i] > max){
ma = i;
max = dp[i];
}
源代码:
#include<iostream>
using namespace std;
int main(){
int N;
cin>>N;
int n = N;
int max;
int num[N];
int dp[N];
int mi = 0, ma = 0;
for(int i = 0; i < N; i++){
cin>>num[i];
}
dp[0] = num[0];
max = dp[0];
for(int i = 1; i < N; i ++){
if(num[i] > num[i] + dp[i - 1])
dp[i] = num[i];
else dp[i] = num[i] + dp[i - 1];
if(dp[i] > max){
ma = i;
max = dp[i];
}
}
int nn = 0;
for(int i = ma; i >= 0; i --){
nn += num[i];
if(nn == max)
mi = i;
}
if(max < 0) cout<<"0 "<<num[0]<<" "<<num[N-1];
else cout<<max<<" "<<num[mi]<<" "<<num[ma];
}
已AC: