クアラルンプ圧力は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 = 0。int型、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 ; }