本文持續更新
對計數,組合數學dp作總結,給出思路,狀態轉移方程,略去**,狀態初始值等。
1 劃分數
(1)m個不可區分的物品分成n份,每份的數量大於等於0,求劃分的方法數。
思路:1)若m < n, 則等價於m個物品劃分為m份。
2)否則,若至少存在1份數量為0,則相當於m個物品劃分為n - 1份;若每份數量大於等於1,則相當於m - n個物品劃分為n份。動態規劃或記憶化搜尋。
(2)整數劃分
n=x1 + x2 + ... + xi (1 <= xi <= n),則為n的乙個劃分。
如果中的最大值小於等於m,則為n的m劃分,記n的m劃分的個數為f(n,m)
求f(n, m)方法:
1)n = 1 或m = 1,則f(n, m) = 1
2)n < m,f(n, m ) = f(n, n)
3)n = m,f(n, m ) = f(n, n - 1) + 1
4)否則,f(n, m) = f(n - m, m) + f(n ,m - 1)
2 hdu1502 regular words
給定n,求n個a,n個b,n個c組成的串的任意字首中a的數量大於等於b的數量,b的數量大於等於c的數量的方法數,類似於卡特蘭數。
dp[i][j][k]表示a, b, c分別i, j, k個時的方法數,則:
dp[i][j][k] = dp[i - 1][j][k] + dp[i][j - 1][k] + dp[i][j][k - 1](i >= j >= k)
3 hdu1133 buy the ticket
m個人手持50元,n個人手持100元,買50元一張的票,售票員開始無零錢,求可行的排隊方法數。
方法1:
抽象為m個1,n個-1的序列,前k(k <= m + n)項和大於等於0的方法數乘以m! * n!。
dp[i][j]表示m個1,n個-1的序列,前k(k <= m + n)項和大於等於0的方法數,則:
dp[i][j] = dp[i - 1][j] + dp[i][j - 1](i >= j)
方法2:
思路來自:並給出證明
m個1,n個-1的序列,前k(k <= m + n)項和大於等於0的方法數等於c(m+n, n) - c(m+n, m+1),證明如下:
a為m個1,n個-1且不符合條件的序列數集合,b為m + 1個1,n - 1個-1的任意序列數集合。
(1)將a中任意序列的第乙個不符合條件的-1變為1,可得到b中一元素,且a中不同元素得到b中不同元素,故a包含於b
(2)將b中任意序列的第乙個1變為-1,可得到a中一元素,且b中不同元素得到a中不同元素,故b包含於a
綜上,集合a,b大小相等。故m個1,n個-1且不符合條件的序列數個數為c(m+n, m+1)。又任意序列方法數為c(m+n, n),故符合條件的為c(m+n, n) - c(m+n, m+1)。
4 可重組合
每個數可以選多次,從n個數中選k個數的方法數:
相當於方程x1 + x2 + ... + xn = k有多少組非負整數解。其中xi表示第i個數被選了多少次。引入輔助變數yi = xi + 1,則y1 + y2 + ...+ yn = n + k。問題轉化為求此方程的正整數解的個數。故方法數為c(n + k - 1, n - 1).
一棵樹有n種形態,m棵不考慮順序則有c(n + m - 1, m)種形態(hdu1294 rooted trees problem)
5 有重複的組合數
poj1285 combinations, once again
n種物品,每種num[i]個,求取r個的方法數。
揹包思想,f[j]表示當前取j個數的方法數,則狀態轉移方程為:
f[j] += f[k](max(j - num[i], 0) <= k < j
)
外層迴圈
列舉物品,內層迴圈從大到小列舉空間,最內層列舉方法數。
6 全錯位排列
n個數(1 <= i <= n),任意數i不能排在第i位,求方法數。
1)容斥原理:
n! - c(n , 1) * (n - 1)! + c(n , 2) * (n - 2)! -...... = n!(1/2! - 1/3! + ... + (-1)^n * 1/n!)
2)遞推公式:
f(1) = 0, f(2) = 1
f(n) = (n - 1) * (f(n - 1) + f(n - 2))
3)另一公式
簡化後的公式是f(n) = [n!/e+0.5]
(向下取整)
應用:hdu3010 n knight
7 偏序集 dilworth定理
鏈:若偏序集中的任意元素均可比較,稱之為鏈。
反鏈:若偏序集中的任意兩元素均不可比較,稱之為反鏈。
定理1:令是乙個有限偏序集,而設r是其最大鏈的大小。則x可以被劃分成r個且不能更少的反鏈。
其對偶定理稱為dilworth定理:
定理2:令是乙個有限偏序集,並令m是反鏈的最大大小。則x可以被劃分成m個但不能再少的鏈。
參考:《組合數學》
8 棋盤的完美覆蓋
m * n的棋盤可以用1 * b的格牌覆蓋當且僅當b是m或者n的乙個因子
更新中…………
組合數學 基本計數
計數問題研究的都是有限集合,本文介紹基本的計數方法,並應用它們解決常見的排列與組合問題。首先,回顧下幾個基本的概念及計數的兩個重要法則。概念1 集合元素的 m 元排列 集合a 有n個元素,從這n個元素中取乙個元素,不放回 連續取 m 次,得到序列 a1,a2,am,則稱 該序列為這n個元素的乙個 m...
組合數學 計數原理
計數原理 抽屜原理 有n個抽屜,n 1個蘋果,那麼至少有乙個抽屜有兩個或兩個以上的蘋果。有n個抽屜,n 1個蘋果,那麼至少有乙個抽屜沒有蘋果。加法原理 如果a類物品有a個,b類物品有b個,那麼a類物品或b類物品共有a b個 沒有性質相同的情況下 乘法原理 如果a有a中發生方式,b有b中發生方式,那麼...
組合數學總結
歷時九天,組合數學快要結束了,寫篇部落格總結一下 emmm.眾所周知,數學一直是我的乙個薄弱i項,這次也算是乙個很好的鍛鍊 先列一下這次都用了哪些知識點 1.組合數 廢話 2.逆元 3.盧卡斯定理 4.資料結構 數狀陣列 線段樹 5.高精 6.暴力打表,瞎猜規律 先來幾道水題 a.排隊 這題一度讓我...