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 }

 

你可能感兴趣的:(HDU)