用结构体保存结果,注意的是最长连续子序列需要的是连续,所以dp的状态方程别写错了。
#include<iostream>
#include<fstream>
using namespace std;
int a[1000];
struct Q {
int qi;
int shi;
} T[1000];
int main() {
freopen("d://in.txt","r",stdin);
int N;
scanf("%d",&N);
for(int i =0; i<N; i++) {
scanf("%d",&a[i]);
}
int dp[1000] = {0};
dp[0] = a[0];
T[0].qi = 0;
T[0].shi = 0;
for(int i =1; i < N; i++) {
dp[i] = a[i];
T[i].qi = i;
T[i].shi = i;
if(dp[i-1]+a[i]>dp[i]) {
dp[i] = dp[i-1] + a[i];
T[i].qi = T[i-1].qi;
T[i].shi = i;
}
}
int maxn = -2147483648;
int k = -1;
for(int i =0; i < N; i++) {
if(dp[i] > maxn) {
maxn = dp[i];
k = i;
}
}
printf("%d %d %d",dp[k],T[k].qi+1,T[k].shi+1);
}