將有標號記為l(labelled) 無標號記為u(unlabelled)
a.無限制
b.每個盒子至少有乙個球
c.每個盒子至多有乙個球
每個小球都有\(m\)種放法,所以就是\(m^n\)。
第二類斯特林數是要求盒子都一樣,所以我們先算出來盒子都一樣的方案數,再乘上乙個\(m!\)就行了。
第二類斯特林數:
\(f[i][j]\)表示\(i\)個小球放進\(j\)個盒子裡,每個盒子至少有乙個小球的方案數。
轉移方程:
\(f[i][j]=f[i-1][j]*j+f[i-1][j-1]\)。
理解:考慮最後乙個小球,一種情況是它單獨乙個盒子,這樣方案數就是\(f[i-1][j-1]\)(前j-1個球放進i-1個盒子裡的方案數)。另一種情況是它和其他小球放進乙個盒子裡,這樣先把前i-1個小球放好,也就是\(f[i-1][j]\),然後第i個小球有j種選擇,所以這種情況的方案數為\(j*f[i-1][j]\)。
c 的情況當盒子數小於小球數是答案為0,以下預設盒子數大於小球數
每個盒子至多放乙個,也就是說每個盒子只有兩種情況:放和不放。
有\(n\)個小球,也就是說有\(n\)個盒子放,\(m-n\)個盒子不放。\(c_m^n\)從m個盒子中選出\(n\)個來放小球。然後n個有標號的小球放進這n個盒子裡有\(n!\)種放法。
第二類斯特林數再稍微加點東西。
列舉有幾個盒子為空,所有的方案數加起來。
標準的第二類斯特林數。
如果能放的話,不管怎麼放都是一樣的。每個球佔乙個盒子,盒子都一樣。
隔板法解決不了有空盒子的情況。所以我們把小球變成\(n+m\)個,相當於預先把每個盒子裡放乙個小球,最後再拿走。
方案數:\(c_^\)
直接上隔板法 \(c_^\)
從\(m\)個盒子中選出\(n\)個放小球。
\(c_m^n\)
dp\(f[i][j]\)表示\(i\)個小球放進\(j\)個盒子裡的方案數。
轉移:一種情況是有空盒,由\(f[i][j-1]\)轉移過來,也就是有乙個空盒的情況。只由這一種轉移過來,兩個及以上的空盒會包含在這裡邊。因為\(f[i][j-1]\)的答案已經算好了,這裡面一定有有空盒的情況。
一種情況是沒有空盒,先拿出\(j\)個小球來,每個盒子裡放乙個,也就是由\(f[i-j][j]\)轉移過來。
先拿出\(m\)個小球每個盒子裡放進乙個,然後就和uua一樣了。
除了不合法的情況,就只有一種放法。
(不是我的**
#include#include#include#include#define ll long long
using namespace std;
inline void read(ll &x)
while(s>='0'&&s<='9')
x*=f;
}inline void print(ll x)
const int n=100010;
const int mod=998244353;
string s;
ll n,m,f[1005][1005];
ll pow(ll x,ll y)
return ret;
}ll c(ll x,ll y)
ll lucas(ll x,ll y)
ll calt(ll x,ll y)
if(y>x)
}ll ans1,ans2;
if(f[x][y-1])
ans1=f[x][y-1];
else
if(f[x-y][y])
else
return (ans1+ans2)%mod;
}ll cal(ll x,ll y)
return f[x][y];
}int main()
if(s=="uub")
else
}if(s=="uuc")
if(s=="ula")
if(s=="ulb")
if(s=="ulc")
if(s=="lua")
if(s=="lub")
else
} if(s=="luc")
if(s=="lla")
if(s=="llb")
if(s=="llc")
else
}return 0;
}
組合數學 求組合數
對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...
數學 組合數學
mod must be a prime const int mod 1e9 7 namespace combinatory ll inv ll x ll fac maxn invfac maxn void initc int n ll a ll n,ll m ll c ll n,ll m ll d ...
組合數學筆記
從n個數中選m個數,每個數至多選一次,方案數 性質 c n,0 c n,n 1 c n,m c n,n m c n,m c n 1,m 1 c n 1,m 楊輝三角 二項式展開 x y n i 0.n c n,i x iy n i 那這裡先說一下楊輝三角 前提 每行端點與結尾的數為1 每個數等於它上...