UVALive 7040 組合數 容斥原理

2021-08-19 13:34:21 字數 1519 閱讀 3764

朵花上色,從m

種顏色裡面選擇恰好k

種顏色,求總數mod 1e9

+7種顏色給花上色的話,肯定是k∗(

k−1)

n−1種方案,但是要求的是恰好k

種,很容易想到用容斥原理解決這個問題。 設ai

表示沒選第i

種顏色的種類數目,則結果為

首先有t組資料,每組資料有 3 個數 n, m, k,分別代表一共有 n 個方格,m種顏色,

而我們要 恰好(注意是恰好) 使用 k 中顏色對這些方格進行塗色,

並且保證的是每兩個相鄰的方格的顏色必須是不一樣的。

而我們知道的是 從m中選出k種顏色對n個進行染色的 總數是 s = c(m,k) * k * (k-1)^(n-1)

意思就是說從m個選出k個,然後對於第1個有k種選擇,對於剩餘(n-1)個分別有(k-1)種選擇

需要注意的是 這裡是用k個顏色去染色n,但是不一定全部用上k種顏色

這個時候我們想想怎麼解決恰好只用k種顏色去染色n

容斥原理 ans = s - (a1 + a2 + a3 + ak) ai 表示 不用 i 種顏色,則我們可以使用的顏色有 k-i種

也可以認為 a0 - a1 + a2 - a3 + ... + ak

ai 表示不用i種顏色

最後的表示式為: c(m,k) * ∑ (-1)^(k-i)*c(k,i)*i*(i-1)^(n-1) | (i->[k,0])

*/#includeusing namespace std;

namespace io

templatevoid print(t x)

templatevoid println(t x)

};typedef long long ll;

const ll mod = 1e9+7;

const int maxn = 1e6+10;

/// 注意到公式中只需要計算c(m,k) 和 c(k,i) 而 m,k 都很大,用c(n,m) = n! / m! / (n-m)! 顯然是不合理的

/// 我們可以用遞推的方式 計算 c(m,k) 和 c(k,i);

/// k最大為1e6次方,遞推是合理的 c(n,m) = c(n,m-1) * (n-m+1) / m 顯然m需要用逆元求

ll cm[maxn],ck[maxn];

ll inv[maxn]; /// 我們只需要 1e6次的逆元,提前處理出來

ll power(ll a,ll b)

return ans;

}void get_inv()

}void init(ll m,ll k)

}ll solve(ll n,ll m,ll k)

return ans * cm[k] % mod;

}int main()

return 0;

}

UVALive 7040 color 容斥原理

傳送門 大意 給 n 朵花上色,從 m種顏色裡面選擇恰好 k 種顏色,求總數mod 1e 9 7 首先如果用 k 種顏色給花上色的話,肯定是k k 1 n 1 種方案,但是要求的是恰好 k 種,很容易想到用容斥原理解決這個問題。設a i表示沒選第 i 種顏色的種類數目,則結果為 a 1 a2 ak ...

bzoj 4710(組合數學 容斥原理)

傳送門 題解 先介紹一條公式 將n個物品分給m個人有c n m 1,m 1 種方案。但是這些方案是包括了不合法的 有些人沒有獲得任何物品 對於這道題,需要保證所有人都分到物品,所以容斥原理解決 ans 0個人沒分到 1個人沒分到 2個人沒分到 n個人沒分到 對於某一種情況 i個人沒分到 當前方案數 ...

9 27T1 組合數 容斥原理

1.分特產2414 cut 問題描述 jyy 帶隊參加了若干場acm icpc 比賽,帶回了許多土特產,要分給實驗室的同學們。jyy 想知道,把這些特產分給n 個同學,一共有多少種不同的分法?當然,jyy 不希望任何乙個同學因為沒有拿到特產而感到失落,所以每個同學都必須至少分得乙個特產。例如,jyy...