放蘋果問題(組合數學經典)

來源:互聯網
上載者:User

標籤:div   如何   roman   蘋果   經典   span   csdn   rom   app   

轉自   : 52761238

 

【問題描述】

把M個同樣的蘋果放在N個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?(用K表示)5,1,1和1,5,1 是同一種分法。

【輸入】

第一行是測試資料的數目t(0 <= t <= 20)。以下每行均包含二個整數M和N,以空格分開。1<=M,N<=10。

【輸出】

對輸入的每組資料M和N,用一行輸出相應的K。

【問題分析】

放蘋果的問題乍看之下很複雜,盤子是一樣的,蘋果也是一樣的;只要每個盤子裡面放的蘋果是一樣多的,不管順序如何最終得到的都是同一種分法。我屬於初學演算法,對於演算法不熟悉,一遇到問題就會用人的思維去思考問題,我會想著空一個盤子是什麼情況,空兩個盤子是什麼情況,一個盤子都不空又是什麼情況。越想腦子越亂,最後就得不到解題方法,但是就目前看的遞迴演算法而言。似乎是因為我想多了,其實我們需要把問題簡化。就拿這個放蘋果的問題而言,我們只需要分兩種情況:有空盤子和沒空盤子。

1.有空盤子:f(m,n)=f(m,n-1)//有空盤子很多人會有疑問,這不是只有一個空盤子的情況嗎?那2個3個空盤子呢?這就需要遞迴的思想,隨著一步一步的將n換成n-1你就會發現那就是2,3個空盤子的情況。

2.沒有空盤子:f(m,n)=f(m-n,n)//沒有空盤子,我們可以看成先給每一個盤子放一個蘋果,則還剩下m-n個蘋果,剩下的問題就是把這m-n個蘋果放到n個盤子裡的問題了,也許有人會問,m-n個蘋果放到n個盤子也會出現空盤子的情況啊,不是和前面的有空盤子重複了?確實,會出現空盤子的情況,但是請注意,他們並不是真的空盤子,因為他們最開始已經放了一個,他們在這裡的空代表著這個盤子只有最開始放的一個蘋果。

因此:f(m,n)=f(m,n-1)+f(m-n,n)       m>=n                  

上面的運算式並不完整,當m<n時的情況沒有考慮,當m<n的時候,肯定最少有n-m個空盤子,不過幸好,這些空盤子並不影響最後的結果,因為每種方法都帶有著些空盤子,剩下的問題就是把m個蘋果放到m個盤子有多少種方法了。

因此:f(m,n)=f(m,m)                m<n

寫到這裡主要運算式基本上已經寫完了,但是遞迴都需要有結束條件,結束條件並不是很難發現,當只有一個盤子時明顯只有一種方法,另外沒有蘋果和只有一個蘋果的時候也只有一种放法。即f(m,n)=1      n=1,m=0

綜上:

f(m,n)=1                         n=1,m=0

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

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

 

 

#include<iostream>#include<cstring>using namespace std;const int maxm=10000;int m[maxm],n[maxm],k[maxm];int putApple(int m,int n);int main(){    memset(k,0,sizeof(k));    int t;    cin>>t;    for(int i=1;i<=t;i++){        cin>>m[i]>>n[i];            }    for(int i=1;i<=t;i++){    k[i]=putApple(m[i],n[i]);    cout<<k[i]<<endl;    }}  int putApple(int m,int n){    if(m==0||n==1) return 1;    if(n>m)         return putApple(m,m);    else        return putApple(m,n-1)+putApple(m-n,n);}

 

放蘋果問題(組合數學經典)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.