SOJ#551 loj#2833テント

ポータル

分析

DP [i] [j]は、プログラムの第i行j考慮の数を表します。

たびに、私たちは3例を考えてみます。

  自分自身の場所

  同じライン上の2点

  同じ列の2点

コード

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
const  int型 MOD = 1E9 + 7 #define追加(x、y)は、X =(X + Y)%MOD
 INT DP [ 3010 ] [ 3010 ]、N、M。
INT のmain(){
     int型I、J、K。
    scanf関数(" %d個の%のD "、&​​N、&M)。
    DP [ 0 ] [ 0 ] = 1 (i = 1 ; iが<= N; iは++)DP [I] [ 0 ] = 1 ;
    (i = 1 ; I <= M; iは++)DP [ 0] [I] = 1 (i = 1 ; iが<= N; iは++ のために(J = 1 ; J <= Mであり、j ++ ){ 
          追加(DP [I]、[J]、DP [I - 1 ] [J])。
          追加(DP [I]、[J]、4LLの * jは*のDP [I- 1 ] [J- 1 ]%のMOD)。
          あれば(私は> 1)を追加(DPを[I]、[J]、1LL * jを×(I- 1)%のMOD * DP [I- 2 ] [J- 1 ]%のMOD)。
          場合(J> 1)(DP [I]、[J]、1LLの*はJ×(J-追加1)/ 2 MOD%* DPを[I- 1 ] [J-2 ]%のMOD)。
      } 
    COUT << DP [n]は[M] - 1 << " の\ n " リターン 0 ; 
}

おすすめ

転載: www.cnblogs.com/yzxverygood/p/11247995.html