整數划分


划分為 k 個正整數

\(f_{i,j}\) 為把 \(i\) 划分為 \(j\) 個數的方案數,得:

\[\large f_{i,j}=f_{i-j,j} + f_{i-1,j-1} \]

整體加 \(1\) 和新划分 \(1\)

划分為不重復的 k 個正整數

\(f_{i,j}\) 為把 \(i\) 划分為 \(j\) 個數的方案數,得:

\[\large f_{i,j}=f_{i-j,j} + f_{i-j,j-1} \]

整體加 \(1\) 和整體加 \(1\) 后再新划分 \(1\)

划分為不大於 m 的不重復的 k 個正整數

\(f_{i,j}\) 為把 \(i\) 划分為 \(j\) 個數的方案數,得:

\[\large f_{i,j}=f_{i-j,j} + f_{i-j,j-1} - f_{i-(m+1),j-1} \]

整體加 \(1\) 和整體加 \(1\) 后再新划分 \(1\)

\(i > m\) 時減去后面一項,因為每個數不重復,所以每次轉移最多有一個數大於 \(m\),變為 \(m+1\),需要減去其貢獻。

[HEOI2014]平衡

划分為 k 個奇數

\(f_{i,j}\) 為把 \(i\) 划分為 \(j\) 個奇數的方案數,\(g_{i,j}\) 為把 \(i\) 划分為 \(j\) 個偶數的方案數,得:

\[\large \begin{aligned} f_{i,j}&=g_{i-j,j}+f_{i-1,j-1} \\ g_{i,j}&=f_{i-j,j} \end{aligned} \]

優化

上面的 \(DP\) 直接做復雜度都是 \(O(n^2)\) 的,無法接受,考慮優化。

划分為若干個正整數

分成兩塊\([1,S-1],[S,n]\)來計算,最后用乘法原理統計答案。

前一塊用直接用完全背包求解。

后一塊中被划分的數大於等於 \(S\),所以原先的 \(DP\)\(j\) 只用枚舉到 \(\frac{n}{S}\),這里考慮到的最小的數也不再是 \(1\),而是 \(S\),於是方程變為:

\[\large f_{i,j}=f_{i-j,j} + f_{i-S,j-1} \]

復雜度為 \(O(n(S+\frac{n}{S}))\)\(S=\sqrt n\) 時最優,復雜度為 \(O(n\sqrt n)\)

划分為不重復的若干個正整數

\(j\) 個數的最小值為 \(\sum\limits_{k=1}^j k = \frac{j(j+1)}{2} \leqslant i\),得 \(j\) 是根號級別的。

五邊形數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM