思路为:max{A[1:i]} = max {A[i] , sum+ A[i], max{A[1:i-1]};
比较简单就直接贴代码了~!
#include<iostream>
using namespace std;
int main()
{
int n,i,p[10005],max,tou,wei,h,sum,flat;
while(cin>>n)
{
if(n==0)
break;
flat=-1;
for(i=0;i<n;i++)
{
cin>>p[i];
if(p[i]>=0)
flat=1;
}
if(flat==-1)
{
cout<<0<<' '<<p[0]<<' '<<p[n-1]<<endl;
}
else
{
max=p[0];
tou=0;wei=0;
h=0;sum=p[0];
for(i=1;i<n;i++)
{
if(sum<0)
{
sum=0;
h=i;
}
sum+=p[i];
if(sum>max)
{
max=sum;
tou=h;
wei=i;
}
}
cout<<max<<' '<<p[tou]<<' '<<p[wei]<<endl;
}
}
return 0;
}