CUC-SUMMER-3-F

2017-08-03  本文已影响0人  Nioge
F - 放苹果
POJ - 1664

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

Input
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

Output
对输入的每组数据M和N,用一行输出相应的K。

Sample Input
1
7 3
Sample Output
8


解法:递归,两种情况。

  1. m<n 至少有一个盘子为空,去掉一个空盘子不影响排列次数,f(m,n)=f(m,n-1)
    2.m>=n 如果盘子都有苹果,则都去掉一个也不影响排列次数,此时f(m,n)=f(m-n,n),如果有盘子为空则此时f(m,n)=f(m,n-1),所以此情况f(m,n)=f(m-n,n)+f(m,n-1)
    递归出口为,m=0,返回1,n=1,返回1。

代码:

#include<iostream>
using namespace std;
int apple(int m,int n){
    if(m==0||n==1)
        return 1;
    if(m<n)
        return apple(m,n-1);
    else
        return apple(m-n,n)+apple(m,n-1);
}
int main()
{
    int num;
    cin>>num;
    while(num--){
        int m,n;
        cin>>m>>n;
        cout<<apple(m,n)<<endl;
    }
}
上一篇下一篇

猜你喜欢

热点阅读