サマースクールキャンプオフ以上の2019頭の牛(第十フィールド)J - 木材加工(スロープの最適化DP)

>ポータル<

問題の意味


$の$ A N-幅の$ W_ {I} $、高さの$ H_木材の{I} $、グループに$ K $を必要とし、各グループ木のすべての部分のために、最も低いブロック群の高さとなっています高さ、幅は一定のまま、最小面積の変化が必要。

分析


$ $ DPは、ソリューションここで与えられた異なる状態の定義を書きます

($ DP $方程式および最適化のための)比較的低い高さに対応するために、高さが比較的高い木材、ハイからローへのソートの高さに応じて、第1板

その$ dを仮定すると、[i]は[K] $フロント$ I $番目の最大面積は$ K $の部分に分割される保持することができ、その後、答えは$ [N] TOT-D [k]を$初期総面積TOT $($です)

どのように転送考えてみましょう

               $のD [i]が[K] = MAX(D [j]が[K-1] +(PRE [I] -pre [J])の\ CDOTさh [i])と$

前記予備の$ $プレフィックスおよび幅、即ち$ [i]は$ W予め[I] = \ sum_ {1} ^ {I}。

暴力転送が高い複雑さ($ O(N ^ {2})$)、最適化する方法を検討します。(ということは、スロープの最適化よくないです)

我々は、{1} <J_ {2} <iは$コンピューティングの$ DP [I] [K] $ときに決定する$ J_ {2} $より良い、すなわち$のJ_を設定します

                $ D [J_ {1}] [K-1] +(PRE [I] -pre [J_ {1}])\ CDOTさh [i]は<D [J_ {2}] [K-1] +(プレ[I] -pre [J_ {2}])の\ CDOTさh [i]は$

この場合の$ J_ {1} $は、後者の$ J_の$ J_ {1} $よりも良好{2} $として、集中型意思決定を省略することができます。

式は次のように単純化することができます

              $ \ FRAC {D [J_ {2}] [K-1] -d [J_ {1}] [K-1]} {プレ[J_ {2}] -プレ[J_ {1}]} $ > $ H [i]は$

その後、我々はそれに単調に減少メンテナンスの決定を設定します

コード

#include <ビット/ STDC ++ H>
 に#define空(> =尾ヘッド)
 の#defineが長い長いllの
 使用 名前空間STDを、
CONSTの INT MAXN = 5E3 + 10、MAXK = 2E3 + 10 int型のn、kの、頭、尾、J。
LL [MAXN] [MAXN]、D [MAXN] [MAXK]、Qを事前。
構造体ノード{ INT W、H;} [MAXN]。
BOOL CMP(ノードA、ノードB){ リターンああ> BH;}
 長い ダブルスロープ(int型のx、int型の Y、int型P){
     リターンロング ダブル)(D [Y] [P- 1 ] -d [X] [P- 1 ])/(予備[Y] - 事前[X])。
} 
int型のmain()
{ 
    scanf関数(" %D%dの"、&​​N&K)。
    LL合計 = 0 ;
    以下のためにint型 i = 1 ; iが<= N; iは++ ){ 
        scanf関数(" %d個の%のD "、および[I] .W、&[I]・H)。
        合計 + = A [i]との.h * [i]の.W。
    } 
    ソート(A + 1、+ 1 + N、CMP)。
    以下のためのint型I = 1 ; I <= N。私は++)プレ[i]は=を事前[I- 1 ] + [I] .W。
    INT P = 1 ; p <= K、P ++ ){ 
        ヘッド =尾= 1 以下のためにint型 i = 1 ; iが<= N; iは++ ){
             ながら(!空&&スロープ(Q [頭部]、Q [ヘッド+ 1 ]、P)> [i]は.H)ヘッド++ 
            J = Q [ヘッド]。D [i]を[P] = D [J] [P- 1 ] + [I]・H *(PRE [I] - 事前[J])。
            一方、(!空&&スロープ(Q [尾]、Q [tail- 1 ]、P)<スロープ(Q [尾]、I、P))tail--; 
            Q [ ++尾] = I; 
        } 
    } 
    のprintf(" %LLDする\ n "、sum- D [n]が[K])。
    リターン 0 ; 
}
コードの表示

 

考えます


それは伝達方程式を記述する必要があります考えていなかった、私たちは伝達方程式を注文した後に、より良い書かれていることがわかった、と方向のソートを気にするように最適化する必要があります、思考を向けるべきだと思うことができ、ボードの高さを並べ替えがあり始めました。オリジナルのブロガーのブログでは、これはあなたに幅広いアイデアといくつかのコントラストを与える、非常に良い書かれているが、私はこの種のものは、まだブログのさまざまなを見ていると思います。$ DPの$最適化スロープについての彼のトピックは、書き込みが$ Aによるものである[I] $は単調ので、設定された増加/減少を維持する決定はあるが、私は、関連するトピックを書くことで、非常に良いです、減少/増加していますブログはブロガーがなぜ凸包メンテナンス/女性パッケージを説明するために与えられていることを見たが、それは上記の理由であるため、と言っていませんでした。また、この問題は、メンテナンス見凸包ので、思考凹型パッケージの原則の類推のメンテナンスは似ていますが、書くつもり後又は凹状のパッケージ関連のトピック(法令フラグ)。混乱が発生した場合は、再び〜$に\ブログ、それはゆっくり$行き、少し明確に感じます、他の人がいる大きな餅のブログを見て引き返し

 

おすすめ

転載: www.cnblogs.com/wizarderror/p/11409178.html