把 MM 个同样的苹果放在 NN 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
盘子相对顺序不同,例如 5,1,15,1,1 和 1,5,11,5,1 算作同一种分法。
输入格式
输入包含多组测试数据。
每组数据占一行,包含两个整数 MM 和 NN。
输出格式
每组数据,输出一行一个结果表示分法数量。
数据范围
1≤M,N≤101≤M,N≤10
输入样例:
7 3
输出样例:
8
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,cnt=0,all=0;
void dfs(int a,int b)
{
//a是盘子位置,b是上一个盘子苹果数
if(a==n)
{
if(m-all>=b)
cnt++;
return ;
}
for (int i = b; i <= m; i ++ )
{
all+=i;
dfs(a+1,i);
all-=i;
}
}
int main()
{
while(cin>>m>>n){cnt=0,all=0;dfs(1,0);cout<<cnt<<endl;}
}