九度OJ—題目1160:放蘋果

來源:互聯網
上載者:User

標籤:九度oj   題目1160   放蘋果   遞迴   

題目描述:

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

輸入:

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

輸出:

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

範例輸入:
17 3
範例輸出:
8
來源:
2011年北京大學電腦研究生機試真題
答疑:
解題遇到問題?分享解題心得?討論本題請訪問:http://t.jobdu.com/thread-7883-1-1.html



基本思路:

令(m,n)表示m個蘋果放到n個籃子裡的種數,那麼勢必會有籃子空餘、籃子都放兩種情況。

1、假如有一個籃子空餘,那麼空餘籃子相當於沒用,那麼(m,n)的問題就是把m個蘋果放到n-1個籃子裡的種數(m,n-1)

2、假如沒有籃子空餘,那麼每個籃子至少應該有一個蘋果,即剩下了m-n個蘋果了,問題就變成了,把m-n個蘋果放到n個籃子裡的問題了(m-n,n)。


所以:(m,n)=(m,n-1)+ (m-n,n);


#include <iostream> using namespace std;  int fang(int k,int r) {     if(k<0)        return 0;     if(r==1||k==1)         return 1;     return fang(k-r,r)+fang(k,r-1); }  int main() {     int k,r;     int n;     while(cin>>n)    {         for(;n!=0;n--){            cin>>k>>r;             cout<<fang(k,r)<<endl;        }    }     return 0; } /**************************************************************    Problem: 1160    User: vhreal    Language: C++    Result: Accepted    Time:0 ms    Memory:1520 kb****************************************************************/


九度OJ—題目1160:放蘋果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.