問題の意味:各グリッドは、異なる色のピースをピースを設置し、同じ行または同じ列にすることができないので、ボードは、いくつかのカラーストーンにm行n列に入れます。どのように多くのチョン方法?
解決策:この問題は、あまりにも料理qwqを行うことはありません。問題のロス・ソリューションは、谷兄を見ることです。
CがFの組み合わせの数、とする[I] [J] [K]:K iおよび列j行法的に正確に作品を占有前者種を表します
次いで、得られた状態遷移方程式:F [I] [J] [K] =シグマF [KI] [KJ] [K-1] * C [N-KI] [I-KI] * C [M-KJ] [プログラムI-KI行J-KJ列の正確数に占める個j番目-KJ] * [K]。この式は、我々は一種前列の占有K-1個の占有KJのKI列のランクを列挙占有され、その後、k番目の部分は、I-KI行j-KJ列を占有することができ、我々はこのI-を選択したことを意味しますKI / J-KJ後のI-KI番号方式/ J-KJの占有番目色石による通知[K]。
私たちはより良い除いて、すべての演算子の前で発見された [k]はちょうど質屋は、いくつかのソリューションにI-KI行J-KJの列を占有している この1つはカウントすることは困難です。
我々は別々に最初の前処理このいずれかを検討し、次に、G [i]は[J] [k]を聞かせて:kは全く同じ色片を行i及び列jを占有表します。
次に、状態遷移方程式を書く:G [I] [J] [K] = C [iがjは*] [K] - シグマG [KI] [KJ] [K] * C [i]は[I-KI] * C [J] [J-KJ]は、式が不正なプログラムの総数はプログラムの数を減算することを意味し、すなわち、kは同じ部分であるが、行i及び列jを占有しません。
だから我々は、前処理グラムのC配列と配列を持っている、あなたは、ACを得ることができます。
1つの#include <ビット/ STDC ++ H.> 2 使用して 名前空間STD; 3 のconst int型 N = 100 + 10 ; 図4 のconst int型 P = 1E9 + 9。; 5のtypedef ロング ロングLL; 6 INT N-、M、C、A [N] ; 7 INT C [N * 10 ] [N * 10 ]、F [N] [N] [N * 10 ]、G [N] [N] [N * 10 ]; 8 // G [I] [J ] [K]:kは全く同じ色片のi行j列占有表す 9 // [I] [J] [K] F:法的占有代表前片の種類のk個正確iがjの列行 10 11 ボイドprework(){ 12 のために(int型 i = 0 ; iは= < 1000年 ; I ++ ) 13 のための(INT J = 0 ; J <= 1000年 ; J ++ ) 14 であれば(jは== 0 || I == j)はC [I] [J] = 1 。 15 他 C [I] [J] =(C [I- 1 ] [J- 1 ] + C [I- 1 ] [j])%のP。 16 } 17 18 のint main()の 19 { 20 CIN >> N >> M >> C。 21 INTの和= 0 。 22 のためには、(int型 i = 1 ; iは= Cを<; iは++)のscanf(" %dの"、&[i])と、合計+ = [I]。 23 prework()。 24 25 のために(int型 i = 1 ; iが<= N I ++ ) 26 のための(INT J = 1 ; J <= Mであり、j ++ ) 27 のための(int型のk = 1 ; kは<=和あり、k ++ ){ 28 であれば(私がj <k)が* 続けます。 29 G [I] [J] [K] = C [iが* j]を[K]。 30 のための(int型 KI = 1 ; KI <= I KI ++ ) 31 のための(INT KJ = 1 ; KJ <= J; KJ ++ ) 32 であれば(!KI = iはKJ || = J)G [I] [J ] [K] =(G [I] [J] [K] - (LL)G [KI] [KJ] [K] * C [I] [KI]%P * C [J] [KJ]%P )%のP。 33 G [I] [J] [K] =(G [I] [J] [k]は%P + P)%のP。 34 } 35 36 LL ANS = 0 。 37 F [ 0 ] [ 0 ] [ 0 ] = 1 。 38 以下のために(int型 I = 1 iは++; iは= N < ) 39 のための(INT J = 1 ; J <= Mであり、j ++ ) 40 のための(INT K = 1 ; K <= Cあり、k ++ ){ 41 のための(int型 KI = 0 ; KI <= I; KI ++ ) 42 のための(INT KJ = 0 ; KJ <= J; KJ ++ ) 43 であれば((I-KI)*(J-KJ)> = [K]) 44 Fを[I ] [J] [K] =(F [I] [J] [K] + F(LL)[KI] [KJ] [K- 1] * C [N-KI] [I-KI]%P * C [M-KJ] [J-KJ]%のP *がG [I-KI] [J-KJ] [K]%のP) %P。 45 もし(K == C)ANS =(ANS + F [I] [J] [K])%のP。 46 } 47 COUT << ANS << ENDL。 48 リターン 0 ; 49 }