格仔染色(容斥原理)

2021-09-12 21:37:15 字數 987 閱讀 1753

棋盤是乙個n×m的矩形,分成n行m列共n*m個小方格。現在萌萌和南南有c種不同顏色的顏料,他們希望把棋盤用這些顏料染色,並滿足以下規定:

1.  棋盤的每乙個小方格既可以染色(染成c種顏色中的一種) ,也可以不染色。 

2.  棋盤的每一行至少有乙個小方格被染色。

3.  棋盤的每一列至少有乙個小方格被染色。 

4.  每種顏色都在棋盤上出現至少一次。

以下是一些將3×3棋盤染成c = 3種顏色(紅、黃、藍)的例子:

請你求出滿足要求的不同的染色方案總數。只要存在乙個位置的顏色不同,即認為兩個染色方案是不同的

輸入只有一行 3 個整數 n,m,c 。1 < = n,m,c < = 400

輸出乙個整數,為不同染色方案總數。因為總數可能很大,只需輸出總數mod 1,000,000,007的值。

首先像這樣的題是可以用盒子與球的方法的。

我們把白色也當做一種顏色,則就有c+1個顏色,則總方案數(隨便排)就是:

根據容斥原理的加加減減就可以:

設i為隨便i行,j為隨便j列,k為隨便k個不同的顏色,則就有:

至於-1的指數,自己推一下就出來了。

這樣用乘法分配律變一下不要告訴我是錯的

然後,我們發現後面的sigma很像二項式定理

(a+b)^n=c(n,0)a^n+c(n,1)a^(n-1)b+...+c(n,i)a^(n-i)b^i+...+c(n,n)b^n

我們先不看前面的,則就有:

∑c(m,j) *  (-(k+1)∧i)∧j

∧表示次方(該死的搜狗)

發現,把a帶入上上個式子後,b不就為1嘛?

所以sigma就

好懂吧(自作多情)

由於g老師說我**亮得太多,所以——————

我還是要亮!

就亮一下核心**吧:

for( int i = 0 ; i <= n ; i ++ )

}

感覺亮了跟沒亮區別不大ee

bzoj5306 NTT 容斥原理 染色

description 傳送門 題解 upd 原來這是二項式反演來著qwq 貼一下容斥題的一點點做法.首先顯然先求方案數g i g i g i 表示只有i ii種出現了s ss次的方案數 那怎麼說也要求乙個f i f i f i 表示至少有i ii種出現了s ss次的方案數 f i cm i cn ...

題解 方塊染色 容斥原理 巧妙分類

剛開始以為是道容斥,寫了這個錯誤程式 int main if t m 1 delta mod delta ans ans delta mod printf d n ans return 0 這顯然是錯的,容斥套容斥,我不知道為什麼我敢交上去 可能是對了樣例 後來我通過仔 bai 細 du 思 ti ...

容斥原理 數論

兩個集合的容斥關係公式 a b a b a b a b 重合的部分 三個集合的容斥關係公式 a b c a b c a b b c c a a b c 最後可以推廣到n個集合,集合裡的元素為奇數則加,偶數減 hdu 4135 很簡單,直接求出所有的質因子,然後容斥解決 author crystal ...