如果沒有每個人都分的限制, 直接上組合數即可
考慮容斥
設\(f[i]\)為至少有\(i\)個人沒有分到特產的方案, 我們可以知道
\[\displaystyle
f[i] = \binom\prod_^\binom
\]其中\(a_j\)為第\(j\)種特產的數量
\[\displaystyle
\binom = c_n^m
\]解釋一下上面的東西吧, 首先從\(n\)個數中選出\(i\)個數代表不選, 然後對於每一種特產, 相當於拿\(n - 1 - i\)塊隔板插入將這\(a_j\)個特產分為\(n - i\)塊, 注意到其中有一些塊是可以為空的, 我們新建\(n - 1 - i\)個點, 要是選了這些點中的第\(i\)個點就代表第\(i\)塊為空, 所以最後就是
\[\displaystyle
\prod_^\binom
\]然後容斥係數是
\[\displaystyle
(-1)^i
\]各位畫個韋恩圖就知道了
所以, 最後的答案是
\[ans = \sum_^(-1)^if[i]
\]
#include #include #include #include #include #include #define itn int
#define read read
#define n 2005
#define mod 1000000007
using namespace std;
int n, m, a[n], c[n][n];
long long ans = 0;
inline int read()
while(c >= '0' && c <= '9')
return x * w;
}int main()
for(int i = 0; i <= n; i++)
printf("%lld\n", ans);
return 0;
}
bzoj 4710(組合數學 容斥原理)
傳送門 題解 先介紹一條公式 將n個物品分給m個人有c n m 1,m 1 種方案。但是這些方案是包括了不合法的 有些人沒有獲得任何物品 對於這道題,需要保證所有人都分到物品,所以容斥原理解決 ans 0個人沒分到 1個人沒分到 2個人沒分到 n個人沒分到 對於某一種情況 i個人沒分到 當前方案數 ...
題解 BZOJ 4717 裝備
傳送門 由於這道題是許可權題,所以題面我也放在這裡了 我不是許可權狗 題目背景 小q最近喜歡上了一款遊戲,名為 艦隊connection 在遊戲中,小q指揮強大的艦隊南征北戰,從而成為了一名dalao。在遊戲中,不僅船隻能力很重要,搭配合適的裝備更是如虎添翼。小q潛心研究配裝三十年,終於 把裝備湊齊...
題解 BZOJ 3910 火車
3910.火車 給你一棵樹,給你乙個訪問節點的序列,按照先後順序去訪問序列中的從未經過過的節點,問經過了多少條邊。並查集 lca 用並查集維護每個點是否走過,如果走過了就將該點和他的第乙個沒被走過的父親合併。lca 用來計算距離,在路徑上暴跳的時候維護並查集,因為每個點最多被經過一次,複雜度 o n...