很典型的動態規劃題
很好的算法:
f(m, n) = f(m-n, n) + f(m, n-1)
f(m, n): 把m個蘋果放到n個盤子中的方法數
f(m, n-1): 把m個蘋果放到n-1個盤子中的方法數(其中至少有一個空盤子)
f(m-n, n): 把m個蘋果放到n個盤子中,而且每個盤子中都有蘋果(先拿n個出來,等m-n個放好了,然后每個盤子放一個)
一定要牢記!!!
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
#include <iomanip>
#include <stdlib.h>
using namespace std;

int PlaceApple(int m, int n)


{
if(m < 0)
return 0;
if(m == 0) //每個盤子一個
return 1;
if(n == 1) //只有一個盤子
return 1;
return PlaceApple(m - n, n) + PlaceApple(m, n - 1);
}

int main()


{
int num,m,n;
cin>>num;
while (num>0)

{
cin>>m>>n;
cout<<PlaceApple(m,n)<<endl;
num--;
}
}