链接:https://ac.nowcoder.com/acm/contest/881/E
用dp[i][j]表示i个A,j个B的答案
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod=1e9+7;
const int maxN=2e3+5;
LL dp[maxN][maxN];
int N,M;
int main()
{
while(~scanf("%d%d",&N,&M))
{
for(int i=0;i<=N+M;i++)
for(int j=0;j<=N+M;j++)
dp[i][j]=0;
dp[0][0]=1;
for(int i=0;i<=N+M;i++)
{
for(int j=0;j<=N+M;j++)
{
if(j>i-N)dp[i+1][j]=(dp[i+1][j]+dp[i][j])%mod;
if(i>j-M)dp[i][j+1]=(dp[i][j+1]+dp[i][j])%mod;
}
}
printf("%lld\n",dp[N+M][N+M]);
}
return 0;
}