hdoj 1231
Problem Description
K個の整数のシーケンス{N 1,N 2,…,NK}が与えられており、その任意の連続するサブシーケンスは{Ni,Ni+1,…と表してもよい.
Nj}のうち、1<=i<=j==K.最大連続サブシーケンスは、すべての連続サブシーケンスの要素と最大のものであり、
シーケンス{−2,11,−4,13,−5,−2}が与えられており、その最大連続サブシーケンスは{11,−4,13}であり、最大および最大値は、−2}である.
は20です
今年のデータ構造の答案用紙の中で、編纂のプログラムが最大を得ることを求めて、今1つの要求を増加して、つまりまた出力しなければなりません.
サブシーケンスの最初の要素と最後の要素.
Input
テスト入力はいくつかのテストケースを含み、各テストケースは2行を占め、1行目は正の整数K(<10000)を与え、2行目はK個の整数を与え、中間はスペースで区切られる.Kが0の場合、入力は終了し、この用例は処理されない.
Output
各テストケースに対して、1行の中で最大と最大連続サブシーケンスの最初と最後の1元を出力します.
素、中間はスペースで区切られます.最大連続サブシーケンスが一意でない場合は、シーケンス番号iとjが最小のそれ(入力例の第2、3グループ)が出力される.すべてのK要素が負の値である場合、その最大値と0を定義し、シーケンス全体の先頭要素を出力します.
Sample Input
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
Sample Output
20 11 13
10 1 4
10 3 5
10 10 10
0 -1 -2
0 0 0
えっと、この問題は見たところ考えがありますが、いつも欠点があります.最大の子串とを求めます.考えは前の総和が0より大きいのでさえすれば、彼を捨てるべきではないです.前のものと0より小さいものなら、私達は彼を捨てて、このようにして最大の子串和を求めることができます.
位置を求めると、後ろの位置が求められます.そして一番大きい位置と前の位置を求めます.
{int n;while(scanf("%d"、&n){if(n==0)break;int=a=new int[n];int i;biaoji=0;for(i=0;i+i+){scanf(%"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""(i=0;i