1、定義
隔板法就是在n個元素間插入(b-1)個板,即把n個元素分成b組的方法。c(n-1,b-1)
2、條件
隔板法必須滿足三個條件:
(1)這n個元素必須相同,(2)所分成的每一組至少分得乙個元素,(3)分成的組別彼此差異。
3、示例
(1)例如:某校組建一球隊需16人,該校共10個班級,且每個班至少分配乙個名額,共有幾種情況。c(16-1,10-1)。
對n件相同物品(或名額)分給m個人(或位置),允許若干個人(或位置)為空的問題,可以看成將這n件物品分成m組,允許若干組為空的問題.將n件物品分成m組,需要m-1塊隔板,將這n件物品和m-1塊隔板排成一排,佔n+m-1位置,從這n+m-1個位置中選m-1個位置放隔板,因隔板無差別,故隔板之間無序,是組合問題,故隔板有cn+m-1 m-1種不同的方法,再將物品放入其餘位置,因物品相同無差別,故物品之間無順序,是組合問題,只有1種放法,根據分步計數原理,共有cn+m-1 m-1×1=cn+m-1 m-1種排法
(2)求方程x1+x2+…+xk=n的非負整數解或正整數解
解:正整數解:轉化為10個相同的小球裝入4個不同的盒子,每盒至少有乙個,有c(10-1,4-1)=84種。
非負整數解:轉化為10個相同的小球裝入4個不同的盒子,可以有空盒,有c(10+4-1,4-1)種。
(3)x個相同的球放入y個不相同的盒子中,要求每個盒子至多n個球至少0個球,共有多少種不同的放法?
首先對於m個球放入y個盒中,每個盒中至少乙個球的放法用隔板法可以得到,即相當於在m-1個位置中放入y-1個擋板將m個球分為y份,這樣每份至少為1,為
而x個球放入y個盒中,每個盒中至少0個球的放法相當於x+y個球放入y個盒中,每個盒中至少乙個球的放法,即相當於將x+y個球分入y個盒中,再從每個盒中取出1球,為
而對於指定t個盒子(例如1,2,3,···,t號盒子)中的球數至少為n+1個球的放法等同於將(x-t*(n+1))個球放入y個盒中,每個盒中至少0個球的放法,即(x-t*(n+1))個球放入y個盒中後,再在指定的t個盒中各放入n+1個球,為
根據容斥原理,每個盒子至多n球的放法為 總放法-所有指定乙個盒子的球數大於n的方法+所有指定兩個盒子的球數大於n的方法-所有指定三個盒子的球數大於n的方法+······
即為其中
題目鏈結
#include using namespace std;
typedef long long ll;
const ll mod=998244353;
ll n,m,k;
const ll m=2*1e5+5;
ll fact[m],ifact[m];//fact[i]是i的階乘,ifact[i]是階乘的除法逆元,兩者用於求組合數
ll pow_mod(ll n,ll k,ll mod) //快速冪求n^k餘m的結果
return res;
}void init()//初始化
}ll c(ll n,ll m)//求組合數
int main()
else
}printf("%i64d\n",ans%mod);
}return 0;
}
ZOJ3557利用隔板法分析排列組合
分類 數論 2013 03 25 19 50 58人閱讀收藏 舉報題目 how many sets ii 當然本題只要分析出來公式,然後利用lucas解都是浮雲了。本題由於p很大,所以就不能階乘預處理了。題意是 給乙個集合,一共n個元素,從中選取m個元素,滿足選出的元素中沒有相鄰的元素,這樣的選法一...
排列組合(遍歷)回溯法
這裡有乙個回溯函式,使用第乙個整數的索引作為引數 backtrack first 1,如果第乙個整數有索引 n,意味著當前排列已完成。2,遍歷索引 first 到索引 n 1 的所有整數 則 在排列中放置第 i 個整數,即 swap nums first nums i 繼續生成從第 i 個整數開始的...
組合數 隔板法
隔板法是組合數學的一種重要思想 一般表現形式為把m個物品放入n個盒子裡 n m letax壞了tat 每個盒子裡必須有至少乙個物品 所有物品完全相同 求方案數 可以在邏輯上將物品放入乙個一維的長盒子裡 然後在任意兩個物品之間插入隔板 那麼我們可以將問題簡化為在m 1個空位中插入n 1個隔板 從而將物...