計算機保研複試刷題 放蘋果

2021-08-22 04:59:09 字數 1558 閱讀 1554

【問題描述】

把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因此:f(m,n)=f(m,m)                m寫到這裡主要表示式基本上已經寫完了,但是遞迴都需要有結束條件,結束條件並不是很難發現,當只有乙個盤子時明顯只有一種方法,另外沒有蘋果和只有乙個蘋果的時候也只有一種放法。即f(m,n)=1      n=1,m=0

綜上:f(m,n)=1                         n=1,m=0

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

【**】

#include

#include

using

namespace

std;

const

int maxm=

10000;

int m[maxm],n[maxm],k[maxm];

int(int m,int n)

;

intmain

()

for(

int i=

1;i<=t;i++)

} int

(int m,int n)

【執行結果】

計算機保研複試刷題 神奇的口袋

有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john...

計算機專業保研複試面試 大體流程介紹

在你大三下學期的時候,四月份到六月中旬是你投遞夏令營和聯絡老師的最佳時期,提早打探相關訊息,聯絡相關導師,製作乙份好的簡歷是很重要的,當然作為計算機學院的學生,有個自己的個人 還是比較拉風的 如果非常不幸的,你在夏令營中沒有被錄取,或者是像我一樣作死,臨時決定保研的,不要著急,你還有一次不報銷的夏令...

跨專業保研計算機

目前本科在讀,大三,某地質大學偏地質和地理的專業,大一的時候由於種種原因放棄了轉專業。目前對本專業漸漸失望,於是從去年10月份以來搜尋了很多關於跨專業保研的帖子。這裡進行乙個簡單的整理,方便自己看也方便其他有同樣想法的小夥伴們看。來自帖子 主要有中科院軟體所 南大計算機 浙大軟院 北大軟微 中科大軟...