P4766 [CERC2014]宇宙の侵略者

自分を想像してポータルに

問題の解決策

私たちは、このトピックにタグを見たとき、私たちは、これが水問題DPの範囲であることを知っています

明らかに、この間隔は、時間の間隔を指し、

私たちは、[i] [j]は最小コストエイリアンは私〜jの間のすべての時間を破壊表しDP

明らかにこのような大きなオープントーナメントの二次元アレイよりも劣りません

だから、すぐに離散見た後?

状態遷移方程式DP [I] [J] =分(DP [I]、[J]、DP [I] [K-1] + DP [K + 1]〜[J] +エイリアン[ID] .D)

コード

書式#include <cstdioを> 
する#include <CStringの> 
の#include <アルゴリズム>
 使用して 名前空間はstdを、
構造体otherpeople {
     int型、B、D。
}エイリアン[ 305 ]。
INT DP [ 2000 ] [ 2000 ]、LS [ 10010 ]、N、T、CNT。
テンプレート <型名E>インラインボイド読み取る(E&X)
{ 
    X = 0 ;登録INT F = 1チャー CH = GETCHAR()。
    しばらく(CH> ' 9 '|| CH < ' 0 '){ 場合(CH == ' - ')、F = - 1 ; CH = GETCHAR();}
     一方(CH> = ' 0 ' && CH <= ' 9 '){X =(X << 1)+(X << 3)+(CH ^ 48)、CH = GETCHAR();} 
    X * = F。
} 
int型のmain()
{ 
    登録INT LEN、ID、I、J、K、Qは、
    (t)を読み出します。
    一方、(t-- 
    { 
        (N)を読み出し、CNT = 0; 
        memsetの(DP、0はsizeof (DP))。
        memset(LS、0はsizeof (LS))。
        (i = 1 ; iが<= N; ++ I)、(外国人[I] .D)、LS [エイリアン[Iを読み取り、(.B [I]エイリアン)読み出す([i]は.Aエイリアン)読み取ら] .A = 1、LS [エイリアン[i]は.B] = 1 (i = 1 ; I <= 10000 ; ++ I)であれば(LS [i])とLS [I] = ++ CNT。
        以下のための(I = 1エイリアン[I] .A = LS [エイリアン[I] .A]、エイリアン[i]は.B = I ++; iが<= N)LS [i]は.B [エイリアン]。
        (LEN = 1 ; LEN <CNT; ++ LEN)
        以下のための(I = 1、J <= CNT; ++ J、+​​+、J = iがLENを+ I)
        { 
            ID = - 1 (Q = 1 ; Q <= N; ++ Q)場合(I <=エイリアン[Q] .A && J> =エイリアン[Q] .B &&(ID == - 1 ||エイリアン[ID] .D <エイリアン[Q] .D))ID = Q。
            もし - (のid == 1続けます
            DP [I] [J] = 0x7fffff (K =エイリアン[ID] .A; K <=エイリアン[ID] .B; ++ K)DP [i] [j]は=分(DP [I]、[J]、DP [I] [K- 1 ] + DP [K + 1 ] [J] + エイリアン[ID] .D)。
         } 
         のprintf(" %Dを\ n "、DP [ 1 ] [CNT])。
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/yearning/p/11455077.html