1.1 排列
1.2 組合
c(n,m)=c(n-1,m)+c(n-1,m-1)
1.3 二項式定理
(a+b)^n=σc(n,i)a^i*b^n-i
例1.1組合數
快速冪1.4四種放球方法
1)n個不同球放入m個不同袋子 m^n
2)n個相同球放入m個不同袋子 隔板法 c(n+m-1,m-1)
3)n個相同球放入m個相同袋子 用球數目遞增判重 f[i][j]=f[i-j][j]+f[i][j-1]
4)n個不同球放入m個相同袋子 f[i][j]=f[i-1][j-1]+f[i-1][j]*j
其中(1)(2)袋子不同,可以直接用計數方法解決
(3)(4)袋子是相同的,可以互相交換,只能用dp解決
2.1 抽屜原理
2.2 加法原理
2.3 乘法原理
2.4 容斥原理
記f(s)表示滿足集合s中至少乙個條件的方案數,g(s)表示滿足集合s中所有條件的方案數,h(s)表示不滿足集合s中所有條件的方案數。
f(s)=σ(-1)|t|-1g(t),其中t為s的非空子集。
通俗地說就是先把滿足乙個條件的都加上,這時候滿足兩個條件的被加了兩次,所以要減掉一次,然後滿足三個條件的被減成0次了,要加上一次…... 還有另一種形式。
求並集可以轉化為求交集
g(s)=σ(-1)|t|h(t),其中t為s的子集。
通俗地說就是先加上所有方案,然後扣掉不滿足乙個條件的方案,這時候不滿足兩個條件的被扣了兩次,所以要加上一次,然後不滿足三個條件的被加回1次了,所以要扣掉一次……
求交集可以轉化為求補集
例4.1
對乙個n*m的棋盤染色,每格可以是黑色或白色。
要求每行每列都有黑格。
求方案數對10^9+7取模的結果。 n,m<=10^3。
需要滿足的條件是第1行、第2行…第n行、第1列、第2列…第m列都有黑格。
用容斥原理轉化為列舉其中一些條件不滿足,也就是有一些行一些列全是白格。
枚舉行數i和列數j,那麼選出i行j列的方案數是c(n,i)c(m,j),這i行j列全是白格的方案數是2^(n-i)(m-j)。
所以答案就是σ(-1)^(i+j)*c(n,i)c(m,j)2^(n-i)(m-j)。 時間複雜度o(nm)
例4.2
對乙個n*m的棋盤染色,每格可以是黑色或白色。
要求存在一行或一列都是黑格。
求方案數對10^9+7取模的結果。 n,m<=10^3。
需要滿足的條件是第1行、第2行…第n行、第1列、第2列…第m列其中之一都是黑格。
用容斥原理轉化為列舉其中一些(至少乙個)條件都滿足,也就是有一些行一些列全是黑格。
枚舉行數i和列數j,那麼選出i行j列的方案數是c(n,i)c(m,j),這i行j列全是白格的方案數是2(n-i)(m-j)。
所以答案就是σ(-1)i+j-1c(n,i)c(m,j)2(n-i)(m-j)。 時間複雜度o(nm)
上面兩個問題其實是互補的。
容斥出來的式子也是互補的。
其實那兩個容斥的式子就是互補的。
例4.3
對乙個n*m的棋盤染色,每格可以是黑色或白色。
要求存在一行和一列都是黑格。
求方案數對10^9+7取模的結果。 n,m<=10^3。
需要滿足的條件是:
(a)第1行、第2行…第n行其中之一都是黑格。
(b)第1列、第2列…第m列其中之一都是黑格。
先對a用容斥原理,答案變為σ(-1)i-1c(n,i)*有i行都是黑格且滿足b的方案數。
再對b用容斥原理,答案變為σ(-1)i-1c(n,i)*σ(-1)j-1c(m,j)*有i行j列都是黑格的方案數。
化簡一下就是σ(-1)i+jc(n,i)c(m,j)2(n-i)(m-j),其中i,j>=1。 時間複雜度o(nm)
3.1 概率的一些性質
如果事件a和事件b是互斥的,那麼p(a∪b)=p(a)+p(b)。
如果事件a和事件b是相互獨立的, 那麼p(a∩b)=p(a)*p(b),p(a|b)=p(a)。
全概率公式:p(a)=σp(a|b=bi)*p(b=bi)。
貝葉斯公式:p(a|b)=p(b|a)p(a)/p(b)
3.2 期望的一些性質
如果事件a和事件b是相互獨立的, 那麼e(ab)=e(a)*e(b)。
全期望公式:e(a)=σe(a|b=bi)*p(b=bi)。
期望的線性性:e(a+b)=e(a)+e(b)。
例3.1 百事世界盃之旅
每次從[1,n]中隨機乙個整數,問期望隨機多少次可以把1~n都隨機到。 1<=n<=10^6。
如果已經隨機出了k個數,那麼期望多少次可以隨機出乙個新的數呢?
隨機出新的數的概率是(n-k)/n。 記x=(n-k)/n,那麼期望就是1+(1-x)+(1-x)^2+……=1/(1-(1-x))=n/(n-k)。
那麼答案就是n/1+n/2+…+n/n。 時間複雜度o(n)
例3.2 巧克力
有k種顏色的巧克力。每次拿出乙個隨機顏色的巧克力放到桌上,如果桌上有2個巧克力顏色一樣就把它們一起吃掉。
問拿出n個巧克力後桌上恰好有m個巧克力的概率。 1<=n,m<=10^8,1<=k<=100。
用f[i][j]表示i輪之後桌上有j個巧克力的概率。
f[i][j]=f[i-1][j-1]*(k-(j-1))/k+f[i-1][j+1]*(j+1)/k。
打表發現i的奇偶性確定時f[i][j]是收斂的。 i只要列舉到1000就好了。 時間複雜度o(1000*k)
例3.3 骰子
小a有乙個骰子,這個骰子有n面,扔出i的概率是pi。
他扔一次骰子,如果扔到i,那麼他有qi的概率吃一顆巧克力。
現在你看到他吃了一棵巧克力,問他扔出每個數字的概率。 1<=n<=100。
貝葉斯公式:p(a|b)=p(b|a)p(a)/p(b)
5.1 越獄
正難則反
5.2 妖夢拼木棒
巧妙列舉
5.3 牛的idcow ids
用組合數巧妙處理
5.4 錯位排列
遞推或容斥
5.5 硬幣購物
預處理+容斥
5.6 redisgood
期望dp
開源夏令營(1)
前段時間主要做了git的一些配置和熟悉 git pull 從其他的版本庫 既可以是遠端的也可以是本地的 將 更新到本地。git add 是將當前更改或者新增的檔案加入到git的索引中,加入到git的索引中就表示記入了版本歷史中,這也是提交之前所需要執行的一步 git rm 從當前的工作空間中和索引中...
開源夏令營總結
時間過得很快,開源夏令營就要結束了,今天就簡單總結一下這段時間的所學所做。1.研究源 因為專案已經有一定規模,所以第一步肯定是要先弄懂現有專案結構和 邏輯。view層負責把資料顯示出來,包括每一幀的具體資料,和骨骼父子關係等 model,collection會負責資料的驗證和訪問。每當使用者操作時,...
開源夏令營(8)
例如拿標題來舉例,以下兩段 是等效的 一 php the title 二 php echo get the title 注意the permalink 對應的是get permalink 沒有 the 模板標籤大全 常用的模板標籤 php the content 日誌內容 php the title...