整數劃分問題 蘋果盤子問題

2021-06-09 07:42:42 字數 919 閱讀 7286

整數劃分問題

整數劃分問題是演算法中的乙個經典命題之一,有關這個問題的講述在講解到遞迴時基本都將涉及。所謂整數劃分,是指把乙個正整數n寫成如下形式:

n=m1+m2+...+mi; (其中mi為正整數,並且1 <= mi <= n),則為n的乙個劃分。

遞迴法:

遞推表示式如下:

f(n, m)=       1;                                (n=1 or m=1)    //1劃分為m份,或n劃分為1份

f(n, n);                         (n1+ f(n, m-1);                (n=m) //分成的份數中沒有為0的(即全為1相加),有0的則為f(n,m-1)劃分

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

例項應用:7個蘋果放入三個盤子(無重複).

第一類: n個蘋果放入m個盤子中,三個盤子都不為空,每個盤子先放乙個,問題等同於n-m個蘋果放入m個盤子中,即為d(n-m,m);

第二類: n個蘋果放入m個盤子中,三個盤子有乙個盤子為空,則等同於n個蘋果再放入m-1個盤子,即d(n,m-1);

#include

#include

int partitionhelp(int n,int m)

else if(n==1 ||m==1)

else if(n

void main()

下面的另一解法從網上尋得:

#include

using namespace std; 

int a[10]=; 

int len = 0; 

int count = 0;

void fun(int n,int m) 

}  } 

int main()   

整數劃分問題(放蘋果問題)(遞迴)

將正整數n 表示成一系列正整數之和,n n1 n2 nk,其中n1 n2 nk 1 k 1 正整數n 的這種表示稱為正整數n 的劃分。正整數n 的不同的劃分個數稱為正整數n 的劃分數。標準的輸入包含若干組測試資料。每組測試資料是乙個整數n 0 n 50 對於每組測試資料,輸出n的劃分數。5,4 1,...

放蘋果(盤子不一樣)

view submit statistics clarify 總time limit 1000ms memory limit 65535kb description 把m個同樣的蘋果放在n個不同樣的盤子裡,允許有的盤子空著不放,問共有多少種放法?5,1,1和1,5,1是不同的放法。比如輸入2 2,那...

整數劃分問題

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