codevs 1515 跳
Posted 一入OI深似海
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codevs 1515 跳相关的知识,希望对你有一定的参考价值。
/* 画矩阵找规律发现是杨辉三角 Cg (i,j)= C (i+j,i); 贪心走的话 沿着0行(列)一直走然后拐直角 拐弯后每个格子都累加 Cg (n,0) + Cg (n,1) + Cg (n,2) + ... +Cg (n,m) 有n>m 即 C(n+0,n) + C (n+1,n) + C (n+2,n) + ... +C (n+m,n) 上式 = C (n+m+1,m); 然后 ans = n + C (n+m+1,m); 考虑到n m很大 用Lucas定理 之前敲得Lcs都是用数组存阶乘 哪里的mod较小 这里10^9+7 显然存不下 所以直接每次都求一下 */ #include<iostream> #include<cstdio> #include<cstring> #define ll long long #define mod 1000000007 using namespace std; ll Mi(ll a,ll b) { if(b==0)return 1; ll x=Mi(a,b/2)%mod; x=x*x%mod; if(b&1)x=x*a%mod; return x; } ll C(ll n,ll m) { if(m>n)return 0; ll nmj=1,mj=1; for(ll i=n;i>=n-m+1;i--) nmj=nmj*i%mod; for(int i=1;i<=m;i++)//开始以为这句会导致T 后然认真读读题目发现想多了0.0 mj=mj*i%mod; return (nmj*Mi(mj,mod-2))%mod; } ll Lcs(ll n,ll m) { if(m==0)return 1; return C(n%mod,m%mod)*Lcs(n/mod,m/mod); } int main() { ll n,m; cin>>n>>m; if(n<m)swap(n,m); printf("%lld",(n+Lcs(n+m+1,m))%mod); }
以上是关于codevs 1515 跳的主要内容,如果未能解决你的问题,请参考以下文章