這個題其實很簡單,就是將m個相同的蘋果放入相同的盤子裡,問有多少種放法。
我想先對這個題進行一點的修改,如果放入不同的盤子裡,那麼結果就是x1+x2+x3+...+xn=m的解的個數,組合數學上叫多重集合的組合問題。
如果盤子不同,且盤子非空,那麼這個就是整數的有序分拆。也就是多重集合的組合中每乙個至少出現一次的那個結果。
而這個題中盤子是相同的,就是整數的無序分拆問題了。
n的k分拆是說,將n分成k個大於0的數。
整數的無序分拆中有乙個公式是:b(n+k,k) = b(n,1)+b(n,2)+b(n,3)+~~~b(n,k);
其中b(n,k)表式n的k分拆。
要上課了,貼一下**:
#include #include #include using namespace std;
int data[30][30];
int get(int m,int k)
data[m][k] = sum;
return sum;
}int main()
return 0;
}
POJ1664 放蘋果(整數劃分)
description 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。input 第一行是測試資料的數目t 0 t 20 以下每行均包含二個整數m和n,以空格分開。1 m,n 10。output 對輸入的每組資料m...
poj1664放蘋果 遞迴
放蘋果time limit 1000ms memory limit 10000k total submissions 23149 accepted 14694 description 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1...
poj 1664 放蘋果 遞推
解題思路 我們不妨令f m,n 表示m個蘋果放到n個盤子裡有多少種放法,下面對不同的情況給予討論 1 當盤子數為1的時候,只有一種放法就是把所有蘋果放到乙個盤子裡。2 當蘋果數為0的時候,也只有一種放法。3 當m n時,也分兩種情況討論,一種是至少有乙個盤子裡不放蘋果,這樣子就相當於f m,n 1 ...