666:放苹果

描述

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

输入

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

输出

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


搜索,注意后面盘子的苹果数不小于前面的即可。

#include 
using namespace std;
int n,m,ans;
void dfs(int apple,int plate,int pos){
    if(apple==m && plate<=n){
        ans++;
        return;
    }else if(apple>m || plate>n)return;
    else{
        for(int i=pos;i<=m;i++)
            dfs(apple+i,plate+1,i);
    }
}
int main(){
    int t;
    cin>>t;
    while(t--){
        ans=0;
        scanf("%d%d",&m,&n);
        dfs(0,0,1);
        printf("%d\n",ans);
    }
    return 0;
}



你可能感兴趣的:(简单递归)