Codeforces 1146Gゾーニング制限DP

ゾーニングの制限

左から右に手立てDP DPを見つけていない、最大の自然は、私たちはデカルトツリープロセスの構築を検討することが考えられます。

L、Rの最大値iがあれば、線分を介して私のポイントは、すべてのiが列挙されたときに廃棄することができます。

DP [I] [J] [k]が唯一の懸念私ことを示している - 最大点とjとの間の線分を得ることができる、来る伝達方程式を書くことは容易です。

また、ネットワークに流れて書くようだが、しません。

#include <ビット/ STDC ++ H> 使用して名前空間STDを、CONSTのINT N = 50 + 7 int型、H、M、N。
INT ヴァル[N] [N] [N] [N]。
INT DP [N] [N] [N]。INT DFS(INT L、のint R、int型アップ){
     場合(最大< 0 || L> R)戻り0 ;
    INT&ANS = DP [L] [R] [最大]。
    もし(〜ANS)の戻りANS; 
    ANSは =のDFS(L、R、アップ- 1 )。
    以下のための

 

 



 int型 J =リットル; J <= R。J ++ ){
         int型 TMP =ヴァル[L] [R] [J] [最大- 1 ] +アップ* アップ。
        TMP + = DFS(L、J - 1 、上)。
        TMP + = DFS(J + 1 アップ、R)。
        ANS = MAX(ANS、TMP)。
    } 
    戻りANS。
} 

int型のmain(){ 
    memsetの(DP、 - 1はsizeof (DP))。
    scanf関数(" %D%D%D "、&​​N、&H&M)。
    以下のためにint型私= 1 ; I <= M、I ++){
         int型のL、R、X、C。
        scanf関数(" %D%D%D%D "、&​​L&R&X、&C)
        以下のためにint型 i = 1 ; iが= Lを<; iは++ ){
             ためINT J = Rあり、j <= nであり、j ++ ){
                 ためのint型、kは<= R、K = L kは++ ){ 
                    ヴァル[I] [ J] [K] [X] - = C。
                } 
            } 
        } 
    } 

    のためのint型 i = 1 ; iが<= N; iが++ ){
         ためint型 J = I; J <= nであり、j ++ ){
             ためのint型 K = I; K <= J; ++ kは){
                 ためINT Z = 1 ; Z <= hの; Z ++ ){ 
                    ヴァル[I] [J ] [K] [Z] + = valの[I] [J] [K] [Z - 1 ]。
                } 
            } 
        } 
    } 

    のprintf(" %d個の\ n "、DFS(1 、N、H))。

    リターン 0 ; 
} 

/ * 
* /

 

おすすめ

転載: www.cnblogs.com/CJLHY/p/11592595.html
おすすめ