K.论演员的自我修养---组合数的运用路径计数

论演员的自我修养

Time Limit 1000MS
Memory Limit 256MB

题目链接https://csustacm.fun/problem/1102

在这里插入图片描述

在这里插入图片描述


这题和之前武大的校赛的一题题比较像,所以比赛的时候很快就A了。。。

武大校赛的路径计数https://blog.csdn.net/qq_43906000/article/details/89085780

这题没有限制路径的左右走法,所以就不用扣去不合法的路经数了。
而同样我们还是可以找规律:

在这里插入图片描述
对于一般的路径计数来讲我们是从零开始答案为1的,而这里是2开始,那么我们只需要在一般的路径计数上吧x坐标和y坐标-2就行了。

一般的路径总数:C(x+y,x),那么这里的就是C(x+y-4,x-2)了。

以下是AC代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int mac=1e5+5;
const int mod=1e9+7;
ll f[mac*2],inv[mac*2];
ll C(ll x,ll y);
int main()
{
	ll t,n,m,x,y;
	inv[1]=1;
	for (int i=2; i<=mac; i++){
		inv[i]=(mod-mod/i)*inv[mod%i]%mod;
	}   
	scanf ("%lld%lld%lld%lld",&m,&n,&x,&y);//m<n;
	ll ans=C(x+y-4,x-2)%mod;
	printf ("%lld\n",ans);
	return 0;
}
ll C(ll x,ll y)
{
	memset(f,0,sizeof(f));
	f[0]=1;
	for (int i=1; i<=y; i++){
		f[i]=(f[i-1]*((x-i+1)*(inv[i]%mod)%mod))%mod;//求C(n+m-1,i); 
	}
	return f[y];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值