整數劃分問題

2021-07-10 19:36:32 字數 760 閱讀 4877

題目:

將正整數劃分成一系列正整數的和:

n = n1 + n2 + n3 +n4 + ...+nk ( n1>=n2>=n3...>=nk>=1,k=1)。

正整數的這種表示稱為正整數的一種劃分。

正整數n的不同的劃分數稱為n的劃分數,記作p(n)。

給定n,求p(n)。

分析:

對給定的n的不同劃分,n1一定是小於等於n。因此可以確定 n1的範圍為1≤  n1 ≤ n。

為方便討論n1取某個取值時的劃分數,定義n1不大於m時n的劃分數為p(n,m)。

當m=1時,

n只能被分成n個1,故p(n,1)=1

當m < n時,n的劃分有兩類:

n1 = m的劃分,此時劃分數等於n-m的劃分,即p(n-m,m)

n1 < m 的劃分,即劃分的數字中都比m小,因此應該是n1 <= m-1,此時劃分數為p(n,m-1)

故p(n,m)=p(n,m-1)+p(n-m,m)

當m = n時,可以分為兩類

n1 = n ,只有1種

n1 < n,即n1 <= n-1 ,種數為p(n,n-1)

**:

#includeint p(int n,int m) 

int main()

整數劃分問題

整數劃分問題是乙個經典問題,幾乎在講演算法設計的書中都會講,下面把主要的思想給總結下。所謂整數劃分,就是將乙個正整數n劃分為一系列的正整數之和,如將n可以劃分為 1 我們該如何找出所有的劃分呢?我們可以先來看看整數劃分的規律 譬如正整數 6 劃分情況如下 6 5 14 2 4 1 1 3 3 3 2...

整數劃分問題

給定乙個自然數,分成k部分,a1,a2.的數的和,要求a1 a2.求有多少種?原理 整數n拆分成最多不超過m個數的和的拆分數,和n 拆分成最大不超過m的拆分數相等。根據這個原理,原問題就轉化成了求最大拆分為k的拆分個數與最大拆分為k 1的拆分個數的差 f n,k f n,k 1 f n k,k 如下...

整數劃分問題

首先是遞迴解法 整數劃分問題是將乙個正整數n拆成一組數連加並等於n的形式,且這組數中的最大加數不大於n。如6的整數劃分為 65 1 4 2,4 1 1 3 3,3 2 1,3 1 1 1 2 2 2,2 2 1 1,2 1 1 1 1 1 1 1 1 1 1 共11種。下面介紹一種通過遞迴方法得到乙...