羅バレーP3158 [CQOI2011] + DP放電片組合せ論

問題の意味:各グリッドは、異なる色のピースをピースを設置し、同じ行または同じ列にすることができないので、ボードは、いくつかのカラーストーンに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 }

 

おすすめ

転載: www.cnblogs.com/clno1/p/11653446.html