#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>#include<queue>#include<vector>#include<map>#include<unordered_map>#include<string>usingnamespace std;/*
题意:求最大连续的子序列和,并输出第一个和最后一个数字如果相等则输出最小的索引
分析:可以用动态规划求解,dp[i]表示以第i位结尾的前面的子序列和最大值
有方程如dp[i] = max{dp[i-1]+a[i],a[i]};
*/intmain(){int n;
cin >> n;
vector<int>dp(n),a(n);for(int i =0; i < n;++i)scanf("%d",&a[i]);
dp[0]= a[0];for(int i =1; i < n;++i) dp[i]=max(a[i],a[i]+dp[i-1]);int ed=0,st=0;for(int i =1; i < n;++i){if(dp[ed]< dp[i]){
ed = i;}}for(int i = ed; i >=0;--i){if(dp[i]<0){
st = i +1;break;}}if(dp[ed]<0)printf("0 %d %d", a[0], a[n -1]);elseprintf("%d %d %d", dp[ed], a[st], a[ed]);return0;}
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>#include<queue>#include<vector>#include<map>#include<unordered_map>#include<string>using namespace st