#include <stdio.h>
//由题目知道,在x*y的网格中,我们只能向下x次,和向右y次
//每一次都是一个决策点
//题目简化为在(x+y)步中选择x次向下(或者y次向右)
//也就是排列组合中的组合
int main() {
int x=0,y=0;
scanf("%d %d",&x,&y);
long long sum=1;//排列数(用long long 不用 int 是因为数字太大越界了)
int num=1;//阶乘
int times = x + y ;//向右和向下的次数和
for(int i=1;i<=y;i++)
{
sum*=times--;
num*=i;//算阶乘
}
printf("%lld\n",sum/num);// 排列数除以阶乘就是组合数
return 0;
}
//ps:该方法只能算较小的数,大数有可能超出数字范围

京公网安备 11010502036488号