#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
int n;cin>>n;vector<int> ppp;int flag=0;
for(int i=0;i<n;i++){
int temp;cin>>temp;ppp.push_back(temp);
if(temp>=0) flag=1;
}
if(flag==0){
cout<<0<<' '<<ppp[0]<<' '<<ppp[n-1];
return 0;
}
int d[n];d[0]=ppp[0];
int s[n]={};
for(int i=1;i<n;i++){
if(d[i-1]+ppp[i]>ppp[i]){
d[i]=ppp[i]+d[i-1];
s[i]=s[i-1];
}else{
d[i]=ppp[i];
s[i]=i;
}
}
int k=0;
for(int i=1;i<n;i++){
if(d[i]>d[k]) k=i;
}
cout<<d[k]<<' '<<ppp[s[k]]<<' '<<ppp[k];
return 0;
}
上面代码可以AC,下面这段代码22分,一个测试点找不到错在哪了...
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
int n;cin>>n;vector<int> ppp;int flag=0;
for(int i=0;i<n;i++){
int temp;cin>>temp;ppp.push_back(temp);
if(temp>=0) flag=1;
}
if(flag==0){
cout<<0<<' '<<ppp[0]<<' '<<ppp[n-1];
return 0;
}
int d[n];d[0]=ppp[0];
for(int i=1;i<n;i++){
d[i]=max(d[i-1]+ppp[i],ppp[i]);
}
int maxnum=0;
int start,end;
for(int i=0;i<n;i++){
if(d[i]>maxnum){
maxnum=d[i];end=i;
}
}
int tempnum=maxnum;
for(int i=end;i>=0;i--){
if(tempnum-ppp[i]==0){
start=i;
}else if(tempnum-ppp[i]>0){
tempnum-=ppp[i];
}
}
cout<<maxnum<<' '<<ppp[start]<<' '<<ppp[end];
return 0;
}