hdu 1231 最大连续子序列 (dp)

来源:互联网 发布:无线网没有网络怎么办 编辑:程序博客网 时间:2024/04/29 06:16

题目链接: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;}


原创粉丝点击