学校の運動運動の浙江データ構造7-1最大サブシーケンス和(25分)

一連の所定の  K整数{  N 1 、  N 2 、...、  N K }。連続的なサブシーケンスは、と定義される{  N I 、  N I + 1 、...、  NのJ 1.最大サブシーケンスは、その要素の最大の和を有する連続的なサブシーケンスであります。例えば、シーケンス{-2、11 -4、13 -5、-2}与え、その最大のサブシーケンスは、最大合計が20であると{11、-4、13}です。

今、あなたは、一緒に第一および最大サブシーケンスの最後の数字で、最大の合計を見つけることになっています。

入力仕様:

各入力ファイルには、1つのテストケースが含まれています。各ケースは2行を占めています。最初の行は、正の整数含ま  Kを(≤)。2行目は含ま  スペースで区切られ、K番号。

出力仕様:

各テストケースのために、一緒に第一及び最大サブシーケンスの最後の数と一行最大和で出力、。数字は1つのスペースで区切る必要がありますが、行の末尾に余分なスペースがあってはなりません。最大サブシーケンスが一意でない場合には、出力最小インデックスを持つ1  i及び  (サンプル場合によって示されるように)J。すべての場合には  K番号は否定している、その最大の和が0になるように定義され、そしてあなたが最初に全体のシーケンスの最後の番号を出力することになっています。

サンプル入力:

10
-10 1 2 3 4 -5 -23 3 7 -21

サンプル出力:

10 1 4



書式#include <iostreamの> 
の#include <ベクトル>
 使用して 名前空間はstdを、
INT のmain()
{ 
    int型のT。
    CIN >> T; int型の合計= 0、TMP、最大= - 1 ; 
    ベクトル < int型 > VEC; 
    ベクトル < int型 > のres; 
    ベクトル < int型 > すべて。
    一方、(T-- ){ 
        CIN >> TMP。
        all.push_back(TMP)。
        vec.push_back(TMP)。
        合計 + =TMP;
        もし(合計> MAX){ 
            最大 = 和。
            RESの =のVEC; 
        } 
        もし(合計< 0 ){  = 0 
            vec.clear(); 
        } 
    } 
    もし(!最大= - 1)COUT <<最大<< "  " << RES [ 0 ] << "  " << RES [res.size() - 1 ]。
    他の coutの<< 0 << "  " <<全て[ 0 ] << <<すべて[all.size() - 1 ]。
    システム(一時停止)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/littlepage/p/11374981.html