HDU1231

View Code
 1 /*
 2 最大连续子序列和
 3 输出 ans 和 首元素,尾元素
 4 */
 5 
 6 /*
 7 //TLE 只适合处理小型数据
 8 #include<stdio.h>
 9 #include<string.h>
10 #include<stdlib.h>
11 #include<algorithm>
12 #include<iostream>
13 #include<queue>
14 using namespace std;
15 const int maxn = 10005;
16 int a[ maxn ];
17 int main(){
18     int n;
19     while( scanf("%d",&n) !=EOF ){
20         if( n==0 ) break;
21         for( int i=1;i<=n;i++ )
22             scanf("%d",&a[ i ]);
23         int st=1,en=1;
24         int ans=0;
25         int flag=-1;
26         for( int i=1;i<=n;i++ ){
27             int tmp=0;
28             for( int j=i;j<=n;j++ ){
29                 tmp+=a[ j ];
30                 if( tmp>ans ){
31                     ans=tmp;
32                     st= i ;
33                     en= j ;
34                     flag=1;
35                     continue;
36                 }
37                 if( ans==tmp ){
38                     if(flag==-1){
39                         st=i;
40                         en=j;
41                         flag=1;
42                     }
43                 }
44             }
45         }
46         if( flag==-1 )
47             printf("0 %d %d\n",a[1],a[n]);
48         else{
49             printf("%d %d %d\n",ans,a[st],a[en]);
50         }
51     }
52     return 0;
53 }
54 */
55 #include<stdio.h>
56 #include<string.h>
57 #include<stdlib.h>
58 #include<algorithm>
59 #include<iostream>
60 #include<queue>
61 using namespace std;
62 const int maxn = 10005;
63 int a[ maxn ];
64 int sum[ maxn ];
65 int main(){
66     int n;
67     while( scanf("%d",&n)!=EOF && n ){
68         for( int i=1;i<=n;i++ )
69             scanf("%d",&a[ i ]);
70         int ans;//-1
71         memset( sum,0,sizeof(sum) );
72         int st,en,x,y;
73         ans=st=en=x=y=a[ 1 ];//x,y在这里能初始化
74         sum[ 1 ]=a[ 1 ];
75         for( int i=2;i<=n;i++ ){
76             if( sum[ i-1 ]<=0 ){
77                 sum[ i ]=a[ i ];
78                 st=en=a[ i ];
79             }
80             else{
81                 sum[ i ]=sum[ i-1 ]+a[ i ];
82                 en=a[ i ];
83             }
84             if( ans<sum[ i ] ){
85                 ans=sum[ i ];
86                 x=st;
87                 y=en;
88             }
89         }
90         if( ans<0 ){
91             printf("0 %d %d\n",a[1],a[n]);
92         }
93         else{
94             printf("%d %d %d\n",ans,x,y);
95         }
96     }
97     return 0;
98 }

 

posted @ 2012-12-04 14:28  xxx0624  阅读(414)  评论(0编辑  收藏  举报