主要是要找規律,可以在草稿本上自己找一下規律。
假設當前蘋果數為i,盤子數為j,用a[i][j]表示i個蘋果放到j個盤子中。
1、如果蘋果數為0或者1,那麼方法就是1;如果盤子數為0或者1,方法也是1
2、如果蘋果數大於等於盤子數,那麼方法為 蘋果數為i,盤子數為j-1時的方法 + 蘋果數為i-j,盤子數為j時的方法 ,即a[i][j] = a[i][j-1] + a[i-j][j]
(這個遞推式我自己感覺不太好想。蘋果數大於盤子數時,放法分為兩種情況:有盤子為空和沒有盤子為空。有盤子為空時,每次都是遞推式的上乙個,即i個蘋果放j-1個盤子的情況;沒有盤子為空時,我們先乙個盤子乙個蘋果的放好,相當於剩下i-j個蘋果放到j個盤子的情況)
3、如果蘋果數小於盤子數,那麼方法為蘋果數為i,盤子數為i時候的方法
(這個好想,觀察上圖即可)
#include
#include
using namespace std;
int a[15]
[15];
intmain()
for(
int i=
0;i<=
10;i++
)//0,1個盤子,不管有多少個蘋果都為1
for(
int i=
2;i<=
10;i++)}
int t,m,n;
scanf
("%d"
,&t)
;while
(t--
)return0;
}
資訊學奧賽一本通 放蘋果(遞迴)
把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。第一行是測試資料的數目t 0 t 20 以下每行均包含二個整數m和n,以空格分開。1 m,n 10。對輸入的每組資料m和n,用一行輸出相應的k。33 2 4 32 72...
資訊學奧賽一本通 小球(drop)
許多的小球乙個乙個的從一棵滿二叉樹上掉下來組成fbt full binary tree,滿二叉樹 每一時間,乙個正在下降的球第乙個訪問的是非葉子節點。然後繼續下降時,或者走右子樹,或者走左子樹,直到訪問到葉子節點。決定球運動方向的是每個節點的布林值。最初,所有的節點都是false,當訪問到乙個節點時...
資訊學奧賽一本通 小球(drop)
this drop is gonna last forever!許多的小球乙個乙個的從一棵滿二叉樹上掉下來組成fbt full binary tree,滿二叉樹 每一時間,乙個正在下降的球第乙個訪問的是非葉子節點。然後繼續下降時,或者走右子樹,或者走左子樹,直到訪問到葉子節點。決定球運動方向的是每個...