整數(shù)劃分就是將一個(gè)正整數(shù)表示成一系列正整數(shù)之和,問有多少種不同劃分方案!
例如整數(shù)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
如果你是編程好手看到這樣的排列,可能一下子就能想到一種解題思路了!感慨,算法就是在培養(yǎng)解決問題的思路!!言歸正傳!先介紹下書上的思路:
一、p(n,m)含義:在正整數(shù)n的所有不同劃分中,最大加數(shù)不大于m的劃分?jǐn)?shù)(m<=n;m,n>=1)!求整數(shù)6有幾種劃分時(shí),既求p(6,6)。。。
二、函數(shù)遞歸關(guān)系:
1、n<1||m<1,return 0;
2、n==1||m==1,p(n,m)=1;
3、n<m,p(n,m)=p(n,n);例如:p(6,10)=p(6,6)
4、n>m,p(n,m)=p(n,m-1)+p(n-m,m);例如:p(6,5)=p(6,4)+p(2,4); p(6,2)=p(6,1)+p(4,2);(這個(gè)等式是關(guān)鍵)
代碼如下















寫完書上的解題思路,我突然發(fā)現(xiàn)前面我想到的一種解題思路錯(cuò)了!!不過這種遞歸算法運(yùn)行效率低,計(jì)算整數(shù)35分解方案數(shù)的時(shí)候,計(jì)算速度很慢(大概兩秒出現(xiàn)答案14930352),40的時(shí)候更慢了- -,我想用二維數(shù)組填表的方式應(yīng)該會(huì)快一點(diǎn)!!有更好算法的可以留言!!隨時(shí)候教~~