整數劃分問題用遞迴會重複計算很多次,浪費空間和時間。122的劃分情況已經超過了int的表示範圍,故不妨開乙個二維陣列再用兩重迴圈,在o(n^2)的時間內得到結果。
#include using namespace std;
int divideinteger(int n);//q[n][m]在正整數n的所有劃分中,最大加數不大於m的劃分個數
for (int i=1; i<=n; ++i) else else else}}
}}
return q[n][n];
}//n = 121時,q[n][n] = 18億+,n為122時,結果就溢位了(int型)
int main()
return 0;
}//zzuwenjie 2017-3-8 15:50:17
遞迴之整數劃分問題
一 問題描述 將正整數n表示成一系列正整數之和 n n1 n2 nk 其中n1 n2 nk 如6 共有11種 6 6 6 5 1 6 4 2 6 4 1 1 6 3 3 6 3 2 1 6 3 1 1 1 6 2 2 2 6 2 2 1 1 6 2 1 1 1 1 6 1 1 1 1 1 1 如5 ...
整數劃分(遞迴)
整數劃分問題是演算法中的乙個經典命題之一,有關這個問題的講述在講解到遞迴時基本都將涉及。所謂整數劃分,是指把乙個正整數n寫成如下形式 n m1 m2 mi 其中mi為正整數,並且1 mi n 則為n的乙個劃分。如果中的最大值不超過m,即max m1,m2,mi m,則稱它屬於n的乙個m劃分。這裡我們...
整數劃分(遞迴)
package test04 元素n的劃分,即存在某些數,n1,n2,n3,n4.使得n1 n2 n 比如6的劃分共有11種,count 6,4 9 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 publi...