题目上标的是递推,确实要用递推做,当然,如果数据规模够小的话可以直接用公式,组合数学大法好啊
#include<iostream>
#include<cstdio>
#define MAX 20
using namespace std;
long long dp[MAX][MAX];
long long fun(long long a){
if(a==0)
return 1LL;
return fun(a-1)*a;
}
long long gao(long long m,long long n){
return (fun(m+n)*(m-n+1)/fun(n)/fun(m+1));
}
long long solve(long long m,long long n){
if(m<0||n<0||m<n)
return 0;
if(dp[m][n]!=0)
return dp[m][n];
return dp[m][n]=solve(m,n-1)+solve(m-1,n);
}
int main(){
long long m,n;
cin>>m>>n;
if(m>=n){
if(m<=10&&n<=10){
cout<<gao(m,n);
}
else{
dp[0][0]=1;
cout<<solve(m,n)<<endl;
}
}
else
cout<<0<<endl;
return 0;
}