最大合計プラスプラスHDU - - 1024年12のテーマの基礎DP1 Aを[Kuangbinは飛ぶためにあなたを取ります]

- 最大合計プラスプラス

1024 - HDU

トピックへのリンク:https://vjudge.net/contest/68966#problem/A

トピック:

今、私はあなたが「最大合計」Ignatius.L問題にACだと思います。勇敢ACMerであるために、我々は常に自分の問題がより困難に挑戦しています。今、あなたは、より困難な問題に直面しています。

    連続した番号の所定の配列S 1、S 2、S 3 、S 4 ... SのX、... S N(1≤x≤n≤1,000,000、-32768≤Sx≤32767)。私たちは、(i、j)は= S関数sumを定義 I + ... + S jを(1≤i≤j≤n)。

    今、整数mを与えられた(m> 0)で、タスクがm iとjのためにあなたを見つけることです、となるように、彼ら(I 1、J 1)+ SUM(I 2、J 2)+ SUM(I 3、J 3 )+ ... +合計(IM、 JM)、最大( または)ix≤iy≤jxix≤jy≤jxを許可していません。

    しかし、私は怠け者だ、私は特別な判定モジュールを書きたくないので、あなたは、出力メートル(IX、JX)(1≤x≤mのiとj、および最大出力は合計のみにありません ) 反対。^ _ ^
入力
    各試験はnは整数S 1、S 2、S 3に続く二つの整数mおよびnは、開始されます ... S nを。
    ファイルの末尾に治療。
収量は、
    行の最大の和を出力します。
サンプル入力

    1 2 3 3 1
    2 6 3 -2 -2 -1。4. 3

の出力例

    。6
    。8

アイデア:他のブログの二つの絵を借ります:

例えば:DP [2] [4] = MAX(MAX(-1,4,2)、2)+ NUM [4] = 7。

// 
// 2019年8月4日にHYによって作成されます。
//
する#include <アルゴリズム> 
書式#include <iostreamの> 
の#include <cstdioを> 
する#include <CStringの> 
の#include <キュー> 
の#include < 設定 > 
書式#include <math.h>の
 使用して 名前空間はstd; 
typedefの長い 長いLL。
const  int型 MAXN = 1E6 + 10 int型DP [MAXN]、[MAXN] [MAXN]、numはfrontmax。
#define MAX 0x3f3f3f3f
 INT のmain()
{ 
    int型N、M。
    同時に(〜のscanf(" %d個の%のD "、&​​M&N))
    { 
        ためint型 i = 1 ; iが<= N; iが++ 
            のscanf(" %dの"、およびNUM [I])。
        memsetの(DP、0はsizeof (DP))。
        memset(frontmax、0はsizeof (frontmax))。
        int型の温度;
        以下のためにint型 I = 1 ; I <= M; iは++ 
        { 
            TEMP = MAX *( - 1 )。
            以下のためのint型 J = I; J <= N; J ++ 
            { 
                DP [J] = MAX(frontmax [J- 1 ]、DP [J- 1。 ;])+ NUM [J] // 最大値DPの前に[J] Jメモリそして、frontmax J-1以前に記憶された最大値 
                frontmax [J- 1 ] = TEMP; 
                TEMP = MAX(TEMP、DP [J]); // TEMP更新された値が最大である
            } 
        } 
        のprintf(" %d個の\ N- " 、TEMP); 
    } 
    戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/Vampire6/p/11298163.html