比赛的时候不会写这个题,一直在找规律,可惜找不到。。。然后就放弃了这个题
今天补题看了题解又不是很懂,花了大半天的时间去理解叉姐的解题思路,终于理解了一点
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int maxn=1000+100;
ll f[maxn*2],inv[maxn*2];
ll mypow(ll a,ll b){
ll sum=1;
while(b){
if(b&1) sum=sum*a%mod;
a=a*a%mod;
b>>=1;
}
return sum;
}
void init(){
f[0]=1;
for(int i=1;i<maxn*2;i++) f[i]=f[i-1]*i%mod;
inv[maxn*2-1]=mypow(f[maxn*2-1],mod-2);
for(int i=maxn*2-2;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
}
inline ll C(int a,int b){
if(a<b) return 0;
return f[a]*inv[b]%mod*inv[a-b]%mod;
}
int main(){
init();
int n,m;
while(scanf("%d%d",&n,&m)==2){
ll tmp=(C(n+m,n)*C(n+m,n)%mod-C(n+m,n+1)*C(n+m,n-1)%mod+mod)%mod;
printf("%lld\n",tmp);
}
}