ACM PKU 1664 放蘋果 類似整數(shù)劃分問題的遞歸
Time Limit:1000MS Memory Limit:10000K
Total Submit:6074 Accepted:3764
把M個同樣的蘋果放在N個同樣的盤子里,允許有的盤子空著不放,問共有多少種不同的分法?(用K表示)5,1,1和1,5,1 是同一種分法。
Input
第一行是測試數(shù)據(jù)的數(shù)目t(0 <= t <= 20)。以下每行均包含二個整數(shù)M和N,以空格分開。1<=M,N<=10。
Output
對輸入的每組數(shù)據(jù)M和N,用一行輸出相應(yīng)的K。
Sample Input
17 3
Sample Output
8
Source
lwx@POJ
看到這道題立即想到了遞歸的經(jīng)典案例:整數(shù)劃分問題。
將正整數(shù)n表示成一系列正整數(shù)之和:n=n1+n2+…+nk,
其中n1≥n2≥…≥nk≥1,k≥1。
正整數(shù)n的這種表示稱為正整數(shù)n的劃分。求正整數(shù)n的不
同劃分個數(shù)。
例如正整數(shù)6有如下11種不同的劃分:
6;
5+1;
4+2,4+1+1;
3+3,3+2+1,3+1+1+1;
2+2+2,2+2+1+1,2+1+1+1+1;
1+1+1+1+1+1。
將最大加數(shù)x不大于m的劃分個數(shù)記作q(n,m)
有
1 n=1 || m=1
q(n,m) = { q(n,n) n<m
1+q(n,n-1) n=m
q(n,m-1)+q(n-m,m) n>m>1
重點在n>m>1的情況。
呵呵,當(dāng)時我還花了好些功夫才理解到哦,真是精妙。有了這一點經(jīng)驗,放蘋果的問題就容易了,我們也有遞歸式
將在m個盤中放n個蘋果記作fun(m,n),且不能有空盤。(題目中的可以有空盤 不方便遞歸,我們循環(huán)累加)
對于fun(m,n)
1 n=1||m=n
resulut = 0 n<m
∑ fun(n-m,i) n>=m , i=1..n
當(dāng)n>=m時,是不是方法和整數(shù)劃分問題的n>m>1時很像呢?呵呵
于是我們得到代碼

2

3



4

5

6

7

8



9

10

11

12

13

14

15

16



17

18

19

20

21



22

23

24

25

26

27

28
