傳送門
首先我們知道,把m個小球放進n個桶裡,桶可以為空的問題,答案是cal (m+n-1,n-1)
在實際中有x1<=a1,x2<=a2,x3<=a3……xn<=an等條件,此時就需要同時滿足這n個條件,也就是有的桶裡面的球超出了他的容量,所以就考慮容斥。
也就是至少不滿足其中乙個條件的方案。就可以用總方案減去這些方案就可以得出答案。
二進位制列舉,如果列舉到當前x,那麼這個不合法的方案數有
cal (m+n-1-(a[x]+1),n-1)種。。。。。
然後就能算出答案了
#define _crt_secure_no_warnings
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define ll long long
typedef
unsigned
long
long ull;
#define eps (1e-9)
const
int maxn =45;
const
int inf =
0x3f3f3f3f
;const
int bas =
131;
const ll mod =
1e9+7;
ll a[maxn]
, inv;
ll qpow
(ll a, ll b)
return res;
}ll cal
(ll a, ll b)
return res * inv % mod;
}int
main()
inv =1;
for(ll i =
2; i < n; i++
) inv =
qpow
(inv, mod -2)
; ll ans =0;
for(
int i =
0; i <(1
<< n)
; i++)}
ll tmp =
cal(n1, m1);if
(f1 &
1)ans =
((ans - tmp)
% mod + mod)
% mod;
else ans =
(ans + tmp)
% mod;
}printf
("%lld"
, ans)
;return0;
}
組合數學 隔板法
隔板法在排列組合中的應用技巧 張紅兵在排列組合中,對於將不可分辨的球裝入到可以分辨的盒子中而求裝入方法數的問題,常用隔板法。例1.求方程的正整數解的個數。分析 將10 個球排成一排,球與球之間形成 9個空隙,將兩個隔板插入這些空隙中 每空至多插一塊隔板 規定由隔板分成的左 中 右三部分的球數分別為x...
組合數學 隔板法
隔板法是組合數學裡面乙個非常重要的解決一類問題的方法,一定要掌握。一類問題 把 n 個元素分成 b 組的方案數,n 個元素相同。這類問題我們常用隔板法解決,即在 n 個元素之間插入 b 1 個板,把他們分成 b 組。分兩種 1 如果分成的每個組都必須有元素的話,那麼答案就是 c n 1,b 1 2 ...
組合數 隔板法
隔板法是組合數學的一種重要思想 一般表現形式為把m個物品放入n個盒子裡 n m letax壞了tat 每個盒子裡必須有至少乙個物品 所有物品完全相同 求方案數 可以在邏輯上將物品放入乙個一維的長盒子裡 然後在任意兩個物品之間插入隔板 那麼我們可以將問題簡化為在m 1個空位中插入n 1個隔板 從而將物...