將正整數n表示成一系列正整數之和
n=n1+n2+…+nk,
其中n1≥n2≥…≥nk≥1,k≥1。
正整數n的這種表示稱為正整數n的劃分。
求正整數n的不同劃分個數。
舉例:
例如正整數6有如下11種不同的劃分:
6;5+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。
遞迴思想:
(1) q(n,1)=1,n1;
當最大加數n1不大於1時,任何正整數n只有一種劃分形式,即
(2)q(n,m)=q(n,n),mn;
n1實際上不能大於n。因此,q(1,m)=1。
(3)q(n,n)=1+q(n,n-1);
正整數n的劃分由n1=n的劃分和n1≤n-1的劃分組成。
(4)q(n,m)=q(n,m-1)+q(n-m,m),n>m>1;
正整數n的最大加數n1不大於m的劃分由n1=m的劃分和n1≤n-1 的劃分組成。
可得遞迴公式如下:
正整數n的劃分數p(n)=q(n,n)。
核心**
//函式:q(int n,int m)
//作用:用來得到正整數n,最大加數不大於m的劃分個數
演算法設計與分析 整數劃分問題
1 正整數n劃分為若干正整數之和,最大加數不超過m的劃分數 n劃分最大加數不超過m 2 正整數n劃分為不超過m個正整數之和的劃分數 n劃分為m份 3 正整數n劃分為若干正奇整數之和的劃分數 4 正整數n劃分為互不相同正整數之和的劃分數 其中,整數劃分無順序,比如對7劃分,認為2 2 3和3 2 2和...
整數劃分問題 演算法
在遞迴裡,要對形參進行判斷 1 當n 1時 q 1,m 表示是對1的劃分,那麼只有一種劃分方式 1 2 當m 1時q n,1 當m 1時其實就是把讓所有加數小於等於1,那就是所有加數都是1咯 不考慮負數 當然也只有一種劃分方式 3 當n m時q n,n 此時就是對n的劃分出來的數沒有限制,預設限制就...
全排列與整數劃分演算法分析
1.全排列演算法 題目 求出1 n的全排列.思想 交換第1個元素與第i個元素,得到n個序列 把每個序列分成兩部分 第乙個元素,其餘的元素 對其餘元素執行全排列操作,記得操作完後,將這兩個元素交換回來,以方便下面的交換.演算法實現 void swap int a,int b 交換a和b void pe...