传送门
递归递归一直递归 如果遇到之前已经求出来的直接加上就可以了 要注意的是,我一直忽略了m为0的情况,我一直认为m不可能为0,其实也可以啊,m为0的时候只有一种方案就是所有的都不取,就可以了
#include<bits/stdc++.h>
using namespace std;
long long f[2100][2100];
const long long mod=1000000007;
long long solve(int x,int y)
{
if(f[x][y]!=-1)
return f[x][y];
if(y>x||x==0)
f[x][y]=0;
else if(y==1)
f[x][y]=x;
else if(x==y||y==0)
f[x][y]=1;
else
f[x][y]=(solve(x-1,y-1)%mod+solve(x-1,y)%mod)%mod;
return f[x][y];
}
int main()
{
int i,j,k;
memset(f,-1,sizeof(f));
int n,m;
scanf("%d%d",&n,&m);
printf("%lld\n",solve(n,m));
return 0;
}