题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1231
解题报告:一晚上加一上午啊!终于搞出来了!
相信最大连续子串和都可以写出来,网上资料一大堆,像N^3,N^2,N算法都有,本题关键是纪录初始位置和终止位置,刚开始想用下标纪录位置,但是总是wa!纠结了一晚上也没有思路,所以换了一种方法,直接 纪录每次的初始位置和终止位置,如果更新sum的话,同时更新初始位置和终止位置,这样子便能使其同步的更新。纪录下标是就是错在这儿
code:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[10005];
int sum,pos,flag,ed,st,start,end;
int main()
{
int m,n;
while(scanf("%d",&n)&&n)
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
pos=sum=a[0];
ed=st=start=end=a[0];
for(int i=1;i<n;i++)
{
if(pos>0)
{
pos+=a[i];
ed=a[i];
}
if(pos<=0)
{
pos=a[i];
ed=a[i];
st=a[i];
}
if(pos>sum)
{
sum=pos;
start=st;
end=ed;
}
}
if(sum>=0)
printf("%d %d %d\n",sum,start,end);
else printf("0 %d %d\n",a[0],a[n-1]);
}
return 0;
}