[Bzoj1801] [AHOI2009]中国将棋[動的計画]

2051 [AHOI2009]中国のチェス

クアラルンプ圧力はP 1がn≤100圧力を見つけたように考えるようになりました

原理を使用して乗算と加算の原則を議論するためのポイント

F [I] [J] [k]はk個の列があるのみi及び列jは、2個の部分を有する放電電流の行であります

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#define MAX(X、Y)(X)<(Y)?(Y):( X)
 の#define MIN(X、Y)(X)<(Y)?(X):( Y)
 の#defineが長いっ長い
 の#define RGレジスタ
 のconst  int型 N = 100 + 5、M = 1000000 + 5、INF = 0x3f3f3f3f、P = 9999973 
LLのN、M、ANS = 0 、F [N] [N] [N]。
テンプレート < クラス T> ボイド RD(T&X){ 
    X = 0int型、W =0 ; CHAR CH = 0 しばらく W | = CH ==(isdigit(CH)!)' - '、CH = getchar関数();
    一方、(isdigit(CH))X =(X << 1)+(X << 3)+(CH ^ 48)、CH = GETCHAR()。
    X?= W - X:X; 
} 

// 72 89 
INT メイン(){
 //     freopenは( "in.txt"、 "R"、STDIN)。
    RD(n)は、RD(M)。
    memsetの(F、0はsizeof (F))。
    F [ 0 ] [ 0 ] [ 0 ] = 1;
    以下のためにint型 i = 0 ; iがn <; ++ I)
     のためにint型 J = 0 ; J <= M; ++ j)は// 放1 
    のためのINT K = 0 ; K <= MJ; ++ K ){ // 放俩 
        F [I + 1 ] [J] [K] =(F [I + 1 ] [J] [K] + F [I] [J] [K])%のP。
        もし [I + F(J)1 ] [J- 1 ] [K + 1 ] =(F [I + 1 ] [J- 1 ] [K + 1 ] + F [I] [J] [K] * j)が%P ; // 放一个在有一个棋子
        場合(jは> = 2)F [Iは+ 1 ] [J- 2 ] [K + 2 ] =(F [Iは+ 1 ] [J- 2 ] [K + 2 ] + F [I] [J] [K] *((J- 1)* J / 2))%のP; // 2列に
        IF(J + K + 1 <= M)F [Iは+ 1 ] [J + 1 ] [K] =(Fは[Iは+ 1 ] [J + 1 ] [K] + F [I] [J] [K] *(MJK))%のP; // 放電石なし
        IF(J + K + 2 <= M)F [Iが+ 。1 ] [J + 2 ] [K] =(Fは[Iが+ 。1 ] [J + 2 ] [K] + F [I] [J] [K] *((mjk- 。1)*(MJK)/ 2))%のP; // ない石の両方と置く
        IF(J && J + K + 1 <= M)Fを[Iは+ 1 ] [j]は[K +は。1 ] =(Fは[Iは+ 1 ] [J] [K + 1 ] F + [I] [J] [K] *(MJK)J *)%のP; // 非内の1つは
    }
     ためint型 I = 0 ; I <= M; ++ I)
     のためにINT = J 0、J <= MI; J ++)ANS =(F + ANS [N-] [I]、[J])%のP; 
    のprintf(" %のLLD " 、ANS);
     戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/lxyyyy/p/11204882.html