由于主包不会逆元,但注意到x,y较小,于是使用了组合数的递推公式:c(n)(k) = c(n-1)(k) + c(n-1)(k-1)
然后就是隔板法,代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x=in.nextInt();
int y=in.nextInt();
int mod=1000000007;
if(x<y){
int t=x;
x=y;
y=t;
}
long c[][];
c=new long[x+1][x+1];
for(int i=0;i<=x;i++) c[i][0]=1;
for(int i=1;i<=x;i++){
//System.out.println(c[i][0]);
for(int j=1;j<=i;j++){
c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
//System.out.println(c[i][j]);
}
}
for(int i=1;i<=x+y;i++){
int os=i/2;int js=(i+1)/2;
long p,q;
if(os>0&&os-1<=x-1) p=c[x-1][os-1];
else p=0;
if(js-1<=x-1) q=c[x-1][js-1];
else q=0;
if(js-1<=y-1) p=(p*c[y-1][js-1])%mod;
else p=0;
if(os>0&&os-1<=y-1) q=(q*c[y-1][os-1])%mod;
else q=0;
long ans=(p+q)%mod;
System.out.println(ans);
}
}
}
//cnk=cnk-1+cn-1k-1

京公网安备 11010502036488号