數的分解

我們常常會對自然數進行分解,求取不同分解的組合數目或者對分解出的序列進行一系列操作。

 

各種分解方法中的k數出現次數:

HDU - 4602

4 = 1 + 1 + 1 + 1          4 = 1 + 1 + 2        4 = 1 + 2 + 1       4 = 2 + 1 + 1 
4 = 1 + 3                      4 = 2 + 2               4 = 3 + 1             4 = 4 

f(n,k)代表對自然數n進行分解的各種分解方法中,數字k出現的次數。

我們可以看出,上述的分解方法是帶有順序的分解,即1、2、1和2、1、1是不同的分解方式。對於帶順序的分解方式,我們可以知道,當最左端或者最右端的數不同時,可代表不同的分解方式,故我們可以假定最右端的值不一樣,當最右端值m定下之後,前面的總數n-m也就定了,而n-m是比n小的一個數,用動態規劃的思想可直接使用結果。

4=(3)+1     4=(2)+2     4=(1)+3   4=(0)+4   ()中的數代表可分解,故我們可以得到狀態轉移方程: 

 f(n,k)=f(n-1,k)+f(n-2,k)+f(n-3,k)......+f(k,k)+F    f(k,k)=1  由於右端值可以等於k,故這個k的貢獻F等於(n-k)的分解個數爲2^(n-k-1)

觀察轉移方程容易得出:f(k,k)=1    f(k+1,k)=1+2^0=2  ....... 相當於從k開始重新計算 ,故任意n.k都可以映射f(n,k)=f(n-k+1,1)

令g(n)=f(n,1), 有狀態轉移方程:     //如果觀察不出也沒事,也可以按照下面方法處理

g(n)=g(n-1)+g(n-2)+...+g(1)+2^(n-2)   回推一步  g(n-1)=g(n-2)+g(n-3)+...+g(1)+2^(n-3)  兩式做減法得新的狀態轉移方程

g(n)=2*g(n-1)+2^(n-3)

運用快速冪得到結果\binom{g(n)}{2^{n-3}}=\begin{bmatrix} 2 &2 \\ 0& 2 \end {bmatrix} ^{n-3}\binom{g(3)}{2^{0}}    g(3)=5,g(2)=2,g(1)=1; 其中g(n)中的n等於f(n,k)中的n-k+1;

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章