我們常常會對自然數進行分解,求取不同分解的組合數目或者對分解出的序列進行一系列操作。
各種分解方法中的k數出現次數:
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)
運用快速冪得到結果 g(3)=5,g(2)=2,g(1)=1; 其中g(n)中的n等於f(n,k)中的n-k+1;