最大の連続サブシーケンス
制限時間:1000分の2000 MS(Javaの/その他)メモリの制限:32768分の65536 K(Javaの/その他)
の合計提出(S):43843受理提出(S):20002
問題の説明
K整数{N1、N2、...、NKの配列所与 }、 ニッケルの連続サブシーケンスとして表すことができる任意のそれらの{たNi +の、1、...、
ニュージャージー} 1 <iが= J <=、< = K. 最大連続配列は、すべての要素および最大の連続サブシーケンスであり
、例えば、所定のシーケンス{-2、11 -4、13 -5、-2}、最大連続サブシーケンス{11、-4 13}、および最大
20。
論文では、今年のデータ構造では、最大の増加を得るためにプログラミングが必要になりましたまた、出力に必要な要件である
最初と最後の要素の順序を。
ニュージャージー} 1 <iが= J <=、< = K. 最大連続配列は、すべての要素および最大の連続サブシーケンスであり
、例えば、所定のシーケンス{-2、11 -4、13 -5、-2}、最大連続サブシーケンス{11、-4 13}、および最大
20。
論文では、今年のデータ構造では、最大の増加を得るためにプログラミングが必要になりましたまた、出力に必要な要件である
最初と最後の要素の順序を。
入力
テストケースを複数含む試験入力、ライン2を表す各試験は、1行目は、正の整数K(<10000)を与える、2行目は、スペースで区切られた、Kの整数を与えます。Kは0、ケースを処理していない入力の終わりである場合。
出力
各試験のために、ライン1における最大出力と最大連続シーケンスの最初と最後の要素
の要素は、空白で区切られました。最大連続サブシーケンスが一意でない場合、出力番号iとj、最小のもの(例えば、入力サンプルグループ2及び3)。すべての要素Kは負であり、定義されている場合、最大は0、包括的要素のシーケンス全体の出力です。
の要素は、空白で区切られました。最大連続サブシーケンスが一意でない場合、出力番号iとj、最小のもの(例えば、入力サンプルグループ2及び3)。すべての要素Kは負であり、定義されている場合、最大は0、包括的要素のシーケンス全体の出力です。
6 - 2 11 - 4 13 - 5 - 2 10 - 10 1 2 3 4 - 5 - 23 3 7 - 21 6 5 - 8 3 2 5 0 1 10 3 - 1 - 5 - 2 3 - 1 0 - 2 0
サンプル出力
20 11 13 10 1 4 10 3 5 10 10 10 0 - 1 - 2 0 0 0 ヒント ヒント 巨大な入力、scanf関数をれる推奨。
トピック分析
合計<0の場合DPアレイは、さらに必要はないだけいくつかのレコードと連続する現在のシーケンスを合計するために、現在のシーケンスを後続の要素、更新された和のための重要性を表していない、そして、最大値か否かを判断します、それは記録する最大の更新間隔のインデックスがある場合。質問が尋ねたことに注意してください:すべての要素がKが負で、かつ、最大値は0である包括的要素のシーケンス全体の出力を定義している場合。
コード
#include <ビット/ STDC ++ H> 使用して名前空間STDを、int型 ANSS、和、L、R、anssl、anssr、I、N、[ 10005 ]。INT メイン() { 一方(scanf関数(" %のD "、&n)は、N!= 0 ) { 用(i = 1 ; iが<= N iが++ ) { scanf関数(" %のD "、および[I])。 } 和 = [ 1 ]。 L = 1 。 R = 1 。 anssl = 1 ; anssr = 1 。 ANSS = A [ 1 ]。 以下のための(I = 2 ; iが<= N; iが++ ) { 場合(合計< 0 ) { 合計は = [I]。 L = I。 R = I。 } 他 { 和 + = A [i]は、 R ++ ; } であれば(和> ANSS) { ANSS = 和。 anssl = L。 anssr = R。 } } もし(ANSS < 0 ) { のprintf(" 0%D%d個の\ n "、[ 1 ]、[N])。 } 他 { のprintf(" %D%D%D \ n " 、ANSS、[anssl]、[anssr])。 } } }