组合数的递推公式
题目:5.10 周练 - Virtual Judge (vjudge.net)
思路:通过组合数递推公式加逆元的方式进行递推计算
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod=1e9+7;
ll cnt,sum;
ll qpow(ll a,ll b){
ll res=1;
while(b){
if(b&1) res*=a;
res%=mod;
a*=a;
a%=mod;
b>>=1;
}
return res;
}
void solve(){
ll n,k;
cin>>n>>k;
ll ans=qpow(2,n)-1;
ll tt=n;
for(int i=1;i<k;i++){
ans=(ans-tt+mod)%mod;
tt=tt*(n-i)%mod*qpow(i+1,mod-2)%mod; //组合数递推加快速幂求逆元
}
printf("Case #%lld: %lld\n",cnt,(ans+mod)%mod);
}
//void init(){ //失败的想法
// ll ans=1;
// in[1]=1;
// for(int i=1;i<=100010;i++){
// in[i]=ans*i;
// in[i]%=mod;
// }
//}
int main(){
int t;
cin>>t;
// init();
while(t--){
cnt++;
solve();
}
}

该博客介绍了如何利用组合数的递推公式和快速幂算法解决编程竞赛中的数学题目,例如在VirtualJudge平台上的一道题目。博主通过C++代码展示了如何计算组合数并求逆元,以此高效地求解特定问题。
最低0.47元/天 解锁文章
1130

被折叠的 条评论
为什么被折叠?



