遞歸--整數(shù)劃分問(wèn)題

??????? 前置文章:遞歸算法:www.itdecent.cn/p/703069f3ba3f .

??????? 在說(shuō)到遞歸算法的時(shí)候,逃不開(kāi)的一個(gè)經(jīng)典問(wèn)題是整數(shù)劃分問(wèn)題。整數(shù)劃分,試講一個(gè)正整數(shù)n表示成多個(gè)正整數(shù)的和:n=m1+m2+……+mk( mk為正整數(shù),且 1 <= mk <=n ),那么{ m1,m2……mk } 就是n的一個(gè)劃分。

??????? 那么整數(shù)劃分是什么意思呢?打個(gè)比方,我家里現(xiàn)在還是有那一片蘋(píng)果林,我這去年就不養(yǎng)兔子了,吃窮了,養(yǎng)不起。這樣今年結(jié)的蘋(píng)果我可以拿來(lái)送人或者是拿去賣了。正好最近我家里要來(lái)一些我的老同學(xué),我現(xiàn)在不知道來(lái)多少人,只知道最少來(lái)兩個(gè),最多四個(gè)人,恰巧我這蘋(píng)果林結(jié)的蘋(píng)果有四斤熟了,我就打算送給他們。但是我這不確定來(lái)多少人,我就要提前規(guī)劃好我這四斤蘋(píng)果怎么送:

??????????? 我這里來(lái)倆人,這倆人跟我關(guān)系不一樣,一個(gè)關(guān)系好一個(gè)關(guān)系差,那我就給那關(guān)系好的三斤,剩下一斤給另一個(gè):3+1;來(lái)這倆人跟我關(guān)系一樣呢,那我就一人兩斤:2+2;

??????????? 我這里來(lái)三人,我就根據(jù)關(guān)系分了,一人兩斤,剩下倆人一人一斤:2+1+1;

??????????? 要是來(lái)四人,正好一人一斤,不偏不倚:1+1+1+1。

??????? 我給這四斤蘋(píng)果做的這個(gè)劃分,就是一個(gè)整數(shù)劃分。在整數(shù)劃分里面,一個(gè)整數(shù)的劃分種最大家數(shù)s不超過(guò)m,即s=max(m1,m2……,mk)<= m,這個(gè)劃分就叫做n的一個(gè)m劃分,記做 f (n,m)。劃分問(wèn)題現(xiàn)在就轉(zhuǎn)換成了求n的劃分個(gè)數(shù)f (n,n)。

??????? 建立f (n,m)的劃分關(guān)系:

??????????? (1) f(1,m) = 1,m>=1;? n =1,劃分只有一種,就是1.

??????????? (2) f(n,1) = 1,n>=1; m =1,劃分只有一種,n個(gè)1.

??????????? (3) f(n,m) = f(n,n);最大加數(shù)不能超過(guò)n.

??????????? (4) f(n,n) = f(n,n-1); n的劃分是由s=n劃分和s<=n-1的劃分構(gòu)成。也就是1+3 = 1+1+2

??????????? (5) f(n,m) = f(n,m-1) + f(n-m,m) n>m>1;也就是最大加數(shù)s不大于m的劃分,是由s=m的劃分和s<=m-1的劃分組成。

??????? 這樣,就能做出f(n,m) 的遞歸公式:

???????????????????????????? 1?????????????????????????????????? n=1,m=1

??????????? f(n,m) =??? f(n,n)??????????????????????????? n<m

???????????????????????????? 1+f(n,n-1)???????????????????? n=m

???????????????????????????? f(n,m-1)+ f(n-m,m)??? n>m>1

??????? 然后做出正整數(shù)n的劃分:

int split ( int n, int m ) {

??????? if ( n==1 || m==1 ) return 1;

??????? else if (n < m ) return split(n,n);

??????? else if (n==m) return split(n,n-1)+1 ;

??????? else return split(n,m-1) + split(n-m,m);

}

??????? 這個(gè)樣子,無(wú)論是整數(shù)劃分問(wèn)題還是我的蘋(píng)果劃分問(wèn)題都解決了,那我接下來(lái)就只需要等著我那些老同學(xué)來(lái),然后分四斤蘋(píng)果了,至于蘋(píng)果林結(jié)的剩下的40斤蘋(píng)果,我去問(wèn)問(wèn)我家喵主子吃不吃。

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一年級(jí)語(yǔ)文上冊(cè)生字表 生字表一(共400字) 啊(ā)愛(ài)(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang閱讀 3,134評(píng)論 0 6
  • 1、土豆切絲,沸水煮一下,別太久。 2、干辣椒、蒜、下油炒香。 3、肉調(diào)好味,下油炒,調(diào)味。 4、倒入土豆絲,醋、...
    尹微優(yōu)閱讀 198評(píng)論 0 0
  • - 12月我計(jì)劃每2日完成1幅圖,但未達(dá)成 1.3日開(kāi)始每日一圖,達(dá)成了 這是幾乎同樣的一個(gè)計(jì)劃,后面的計(jì)劃甚至是...
    會(huì)兒兒兒兒兒閱讀 233評(píng)論 0 0

友情鏈接更多精彩內(nèi)容