Luogu P1103の本を仕上げ

トピックリンク

タイトル効果:nタプルがあり、最初の並べ替えキーを押し、値を各隣接のために定義される第二の内の2つの重要な要素の差分絶対値と。今、あなたは最小値を見つけ、K-タプルを削除します。

発注に関連する最初のキーワードとして、順序を排出することはできません。

そのタプルを除去Kを考える、NKタプルを保持する方がよいです。

F [i]が[j]は最初のi-タプルに対してj番目に予約最小コスト(Iを含んでいなければならない)から、I-1番目のタプルJ-1保持番目、列挙遷移点T前に、与えるように設定状態遷移方程式:

F [I] [J] =分{F [T] [J-1]}(J-1≤t<I)

初期化:[I] [1] = 0 F

回答分{F [i]が[K]}(k≤i≤n)

DPコードは、一般的なコメントは必要ありません

#include <iostreamの> 
する#include <iomanip> 
の#include <CStringの> 
する#include <cstdioを> 
する#include <cmath> 
の#include <アルゴリズム> 
の#include <地図>
 使用して 名前空間STD。
#define INF 0x3f3f3f3f 
インラインINT 読み出す(){
     チャーCH。
    BOOL BJ = 0 しばらく(!isdigit(CH = getchar関数()))
        BJ | =(CH == ' - ' );
    INT RES = CH ^(3 << 4 )。
    一方、(isdigit(CH = GETCHAR()))
        RES =(RES << 1)+(RES << 3)+(CH ^(3 << 4 ))。
    リターン?BJ - 解像度:解像度。
} 
ボイド printnum(INT X){
     場合(X> 9)printnum(X / 10 )。
    putchar(Xの10 + ' 0 ' )。
} 
インラインボイドプリント(INT X、チャーCH){
     場合(X < 0){
        putchar(')(読み取ります。- " ); 
        X = - X。
    } 
    printnum(X)。
    putchar(CH)。
} 
int型N、K。
構造体ノード{
     int型H、W。
    インラインブール 演算子 <(ノードX)のconst {
         戻り H < XH。
    } 
} [ 105 ]。
INT [F 105 ] [ 105 ]。
int型 ANS = 0x3f3f3f3f 
署名された{)(メイン
    N = 
    K = N- (読み取り)
    にとってint型 i = 1 ; iが<= N; iが++ ){ 
        [I]・H = ()を読み取ります。
        [I] .W = 読み取ります(); 
    } 
    ソート(A + 1、A + N + 1 )。
    memsetの(F、0x3fをはsizeof (F))。
    以下のためにint型 I = 1 F [i]は[iが++; iが<= N)1 ] = 0 ; 
    以下のためにint型 I = 2、iがn = <; I ++ のためのINT J = 2、J <= K、J ++のためのint型 L = J- 1、L <I、F L ++)[I] [J] =分(F [I] [J]、F [L] [J- 1 ] + ABS([I ] .w- A [L] .W))。
    以下のためにint型私は= kは、iがn = <; iは++)ANS = 分(ANS、F [i]が[K])。
    印刷(ANS、' \ N ' );
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/soledadstar/p/11370179.html