uva11806(容斥原理)拉拉隊

2021-08-04 01:43:33 字數 1198 閱讀 3926

例題

3 拉拉隊(

cheerleaders, uva 11806

)在乙個m行

n列的矩形網格裡放

k個相同的石子, 問有多少種方法? 每

個格仔最多放乙個石子, 所有石子都要用完, 並且第一行、 最後一行、

第一列、 最後一列都得有石子。

【輸入格式】

輸入第一行為資料組數t(

t≤50

) , 每組資料報含

3個整數m,

n,k(

2≤m,

n≤20

, k≤500

) 。【輸出格式】

對於每組資料, 輸出方案總數除以

1000007

的餘數。

【分析】

如果題目求的是

「第一行、 最後一行、 第一列、 最後一列都沒有石子」

的方案數, 該有多好啊! 這相當於一共只有m-

2行n-

2列, 答案自然是c

((m-2

) (n-2

) ,

k) 了。 幸運的是, 利用容斥原理, 我們可以

把本題轉化為上述問題。

設滿足「

第一行沒有石子

」的方案集為

a, 最後一行沒有石子的方案集為b

, 第一列沒有石子的方案集為

c, 最後一列沒有石子的方案集為d,

全集為s

, 則所求答案就是「在

s中但不在a,

b, c,

d任何乙個集合中」的

元素個數, 可以用容斥原理求解。

在程式中, 我們用二進位制來表示a,

b, c,

d的所有「搭配

」(s對應

172於

「空搭配

」) 。 如果在集合a和

b中, 相當於少了一行; 如果在集合c或

d中, 相當於少了一列。 假定最後剩了r行

c列, 方法數就是c(

rc,

k) 。

#include#includeusing namespace std;

const int mk=505,mod=1000007;

int c[mk][mk];

int main()

{ //預處理出組合數

c[0][0]=1;

for(int i=1;i

UVA 11806 容斥原理

題意 往乙個n m的方格裡放k個石塊,問有多少種方式 最後一行,最後一列,第一行,第一列必須放至少乙個 思路 簡單容斥一下 最後一行不放為事件r1,最後一列c1,第一行r2,第一列c2 全部情況 c1 c2 r1 r2 c1 c2 r1 r2 c1 r1 c1 r2 二進位制列舉一下,奇加偶減 in...

uva11806 容斥定理

n m的矩形 k個人 第一行,最後一行,第一列,最後一列都至少站有乙個人 小水題正著做不好做,要反著想,那就容斥定理,abcd四種情況分別是那四個行列分別沒有人。1 include2 include3 include4 include5 using namespace std 67 const in...

容斥 二進位制UVA 11806

問題是求四個邊都有隊員的排列組合,根據容斥原理可以轉化為對立問題的求解 全集為s c n m,k 該區域有k個隊員的全部排列組合,a 最左邊沒有隊員的全部種數,b 最右邊沒有,c 最上邊沒有,d 最下邊沒有,則答案就是屬於全集s但不屬於 a,b,c,d中任何乙個集合,根據容斥 ans s a b c...