UVALive 7040 Color 容斥原理 + 组合数学递推公式 +lucas
来源:互联网 发布:数据磁带怎么用 编辑:程序博客网 时间:2024/06/14 05:24
题意:
给你m种颜色,你要选出其中k种并全部用上去给那朵花涂颜色,相邻两朵花的颜色要不同有几种方案
思路:
设dp[k]为刚好用k种颜色的答案
如果k种颜色不用完则ans=k*(k-1)^(n-1)
则
dp[k]=ckk*f(k)-ckk-1*f(k-1)+ckk-2*f(k-2)-….
#include<bits/stdc++.h>using namespace std;#define ll long longconst int mod = 1e9 + 7;const int MAXN = 1000010;ll inv[MAXN], fac[MAXN]; // fac[i] =i!%mod inv[i] =1/(i!) %modvoid init(){ inv[0] = fac[0] = inv[1] = fac[1] = 1; for(int i = 2; i < MAXN; i++) fac[i] = fac[i - 1] * i % mod; for(int i = 2; i < MAXN; i++) inv[i] = (mod - (mod / i)) * inv[mod % i] % mod; for(int i = 2; i < MAXN; i++) inv[i] = inv[i - 1] * inv[i] % mod;}ll qpow(ll a, ll b){ ll ans = 1; while(b) { if(b & 1) ans = a * ans % mod; a = a * a % mod; b >>= 1; } return ans;}ll CC(ll a, ll b){ if(a < b) return 0; if(a < MAXN && b < MAXN) return (fac[a] * inv[b] % mod) * inv[a - b] %mod; if(b > a - b) b = a - b; ll up = 1, down = 1; for(ll i = 0; i < b; i++) { up = up * (a - i) % mod; down = down * (i + 1) % mod; } return up * qpow(down, mod - 2) % mod;}ll C(ll a, ll b){ ll ans=fac[a]; ans=(ans*inv[b])%mod; ans=(ans*inv[a-b])%mod; return ans;}ll lucas(ll a, ll b){ if(b == 0) return 1; return CC(a % mod, b % mod) * lucas(a / mod, b / mod) % mod;}ll n, m, k;ll f(ll x){ return (k-x)*qpow(k-x-1,n-1)%mod;}ll solve( ){ ll ans; if(n==k) ans=fac[k]; else if(k==1) ans=0; else { ans=0; for(int i=0;i<k;i++) if(i&1) ans=(ans-(f(i)*lucas(k,k-i))%mod+mod)%mod; else ans=(ans+(f(i)*lucas(k,k-i))%mod)%mod; } return (ans*lucas(m,k))%mod;}int main(){ init(); int T, kase = 1, i, j; cin >> T; while(T--) { scanf("%lld %lld %lld", &n, &m, &k); printf("Case #%d: %lld\n", kase++, solve()); }}
阅读全文
0 0
- UVALive 7040 Color 容斥原理 + 组合数学递推公式 +lucas
- UVALive 7040 Color (容斥原理 + 组合数学递推公式 + 求逆元 + 基础数论)
- UVALive 7040 Color (容斥原理 + 组合数学递推公式 + 求逆元 + 基础数论)
- UVALive 7040 color(容斥原理)
- UVALive 6469 Deranged Exams 组合数学+容斥原理
- UVALive 7040 Color (容斥定理 + 递推求逆元 + 组合数 + 快速幂)
- 2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)
- UVALive 7040 Color 容斥,组合数递推,线形逆元,基础数论
- hdu6143Killer Names(组合递推+容斥原理)
- 组合数学-容斥原理专辑
- 组合数学 容斥原理 专题
- 容斥原理+质因数分解+组合数学
- 组合数学:容斥原理及其应用
- 组合数学之容斥原理
- 【组合数学】八(容斥原理)
- 容斥原理(组合数学)总结
- Codeforces 451E Devu and Flowers (组合数学+容斥+Lucas)
- 20160331 UVA11806 Cheerleaders(组合数公式+容斥原理)
- IO流--字符流
- JS代码作用域解析
- 数据在内存储存的经典列题
- response.getWriter().write()与out.print()的区别
- CentOS安装Mysql数据库
- UVALive 7040 Color 容斥原理 + 组合数学递推公式 +lucas
- 一次线上问题排查:java.lang.OutOfmemoryError: PermGen Space
- Git用法的全面解析,结合Android Studio来讲Git
- Gson完全教程:基础篇
- 一个完整的地址组成
- 用C、C++进行输入并计算(整数、浮点数)
- ffmpeg 在win7 QT mingw下编译
- 如何取得指定的int型数据中某一位的二进制值(1还是0)
- 数据查找算法---顺序查找、二分法查找、二叉树查找、hash查找