题目描述
把 M 个同样的苹果放在 N 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
注意:5、1、1 和 1、5、1 是同一种分法,即顺序无关。
注意:5、1、1 和 1、5、1 是同一种分法,即顺序无关。
输入描述:
输入包含多组数据。 每组数据包含两个正整数 m和n(1≤m, n≤20)。
输出描述:
对应每组数据,输出一个整数k,表示有k种不同的分法。
示例1
输入
7 3
输出
8
// write your code here cpp// pat.cpp : 定义控制台应用程序的
//#include "stdafx.h"
#include"stdio.h"
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
int dp[25][25][25];
int m,n;
int dfs(int i,int w,int nn){//i表示盘子可以装多少个苹果,w表示剩余几个苹果,nn表示装了几个盘子
if(w==0&&nn<=n)return 1;
else if(w<0||nn>=n)return 0;
int ans=0;
for(int j=i;j<=w;j++){
ans+=dfs(j,w-j,nn+1);
}
return ans;
}
int main(){
//freopen("c://jin.txt","r",stdin);
while(cin>>m>>n){
cout<<dfs(1,m,0)<<endl;
}
//freopen("CON","r",stdin);
//system("pause");
return 0;
}