Devuと花(および除外)

トピック:

Devu Nボックスがあり、i番目のボックスがありますramiflorous愛。

Oneと花のボックスに同じ色、異なるボックスに異なる色の花。

これらのボックスからDevuは、プログラムのどのように多くの種類の合計を求めて、花の花束とMブランチを選択しました。

各色の2つの花の花束の数が同じであれば、私は2個の花が同じプログラムだと思います。

結果は、する必要があり10 。9 + 7のみを法の出力後。

入力形式

最初の行は二つの整数N及びMを含有します

2行目はNを表すスペースで区切られた整数含ま。1 2 ... Nを

出力フォーマット

出力プログラムの数を表す整数10 。9 + 7モジュロ109 + 7の結果。

データ範囲

1 N 20 1≤N≤20、
0 M 10 14 0≤M≤1014、
0 A iは10 12 0≤Ai≤1012を

サンプル入力:

3 5
1 3 2

出力例:

3

レポートの問題解決には:
ギャングのブログを参照して少し後、どのように含める排除プロセスを見つける起動しなかった、この質問の目的は、真の意味を理解することでした!

全てFiの場合は、最初のシナリオでは、何の制限はありません。
だから答えをよれば、C(S、N + S-である 1) の複数のセットの組み合わせの無数 
我々は違法からの応答を減算する必要がある状況。
合法的でない場合にxi> fixi> Fi回線のです。
あいあいのXI> fixi> Fiソリューションを設定されています。
|愛| = C(S-( Fiの+ 1)、N + S-1-(FI + 1))は、
我々の以前にそれにFiの+ 1fi + 1の要素を入れに対応します。
同様|Ai⋂Aj| = C(S-( Fiの+ 1) - (FJ + 1)、N + S-1-(FI + 1) - (FJ + 1))
及び除外に従うと答えは
C (S、N + S-1 )-Σ1≤i≤n|愛| +Σ1≤i<j≤n|Ai⋂Aj| ...( 省略)

私たちは、状態によってそれぞれの状態を表す圧縮することができます。
各状態の事前の前処理には、いくつかの要素を配置する必要があります。
前回のスキャン統計が答えます。
Oの時間複雑(2NN)

 

ACコード:

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3 typedefの長い 長いLL。
4  
5  のconst  int型 MOD = 1E9 + 7 6  INTのN、LIM。
7つの LL S、ANS。
8のLL F [ 30 ]、INV [ 30 ]、和[ 1100000 ]。
9  のint NUM [ 1100000 ]。
10  LLコーム(LL N、LLのM)
 11 { // 求解C(n、m)が    
12      であれば(M < 0 13         リターン 0 ;
14      LLのRET = 1 15      のために(LL I =のM + 1 ; I ++; iが<= N 16          RET = RET *(I%のMOD)%MOD。// N!/メートル!
17      のためにint型 I = 1 ; I <= NM; I ++ 18          RET = RET * INV [I]%MOD。// (nm)を!
19      リターンRET;
20  }
 21  
22  のint main()の
 23  {
 24      CIN >> N >> S。// N个盒子、挑选の朵花
25      のためのint型I = 0 ; I <nで、Iは++ 26は、          CIN >> F [I]; // ボックス中のNの入力の花の数
27      [INVを1 ] = 1 ;
 28      のためにINT I = 2 ; Iは= N + < 1。 ; I ++ 29          INV [I]は=(INV [I MODの%] *(MOD-MOD / I))MOD%; // 逆元解決する魔法のプレイテーブル
30      リム=を(1 << N-) - 1。 ; / / バイナリ列挙、容易撥容量
31である     ためint型 I = 0 ; I <=イム; Iは++ 32      {
 33である         ためのInt J = 0 ; J <N-; J ++ 34である         {
 35              IF(I&(1 << J))
 36              {
 37 [                  SUM [I] = F + [J] + 1 ; // 事前は+ 1番目Fiが入れ素子
38れる                  NUM [I] ++; // 出現数におけるタグ
39              }
 40          }
 41      } // 、1,2から、すべての状態を処理された- > N- 
42である     ためint型私は= 0 ; Iは<=イム; I ++ 43は     、{
 44は         IF(NUM [I]%2 45              のANS =(ANS-櫛(S + N- 1 -sum [i]は、S-和[I])+ MOD)%MOD。
46          他の
47              のANS =(ANS +櫛(S + N- 1 -sum [i]は、S-和[I]))%MOD。
48      }
 49      COUT << ANS << ENDL。
50 }

 



おすすめ

転載: www.cnblogs.com/Spring-Onion/p/11310470.html