FZU 2282 错排问题dp
来源:互联网 发布:淘宝钻级店铺转让 编辑:程序博客网 时间:2024/06/08 15:39
题意:
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2282
求1~n的全排列a中,a[i]==i的位置数目>=k的方案数有多少。
思路:
基础错排dp,与HDU 2049几乎完全一样,多了一个前缀和的操作。
代码:
#include <cstdio>using namespace std;typedef long long LL;const int MAXN = 1e4 + 10;const LL MOD = 1e9 + 7;LL dp[MAXN], fac[MAXN], inv[MAXN];LL pow_mod(LL a, LL n) { LL res = 1; while (n) { if (n & 1) res = res * a % MOD; a = a * a % MOD; n >>= 1; } return res;}void init() { fac[0] = inv[0] = 1; for (int i = 1; i <= 10000; i++) { fac[i] = fac[i - 1] * i % MOD; inv[i] = pow_mod(fac[i], MOD - 2); }}LL C(int n, int k) { return fac[n] * inv[k] % MOD * inv[n - k] % MOD;}int main() { //freopen("in.txt", "r", stdin); init(); dp[0] = 1; for (int i = 1; i <= 10000; i++) { LL t = ((i - 1) % MOD + MOD) % MOD; dp[i] = (dp[i - 1] * t) % MOD; if (i >= 2) { dp[i] = (dp[i] + t * dp[i - 2] % MOD) % MOD; } } int T; scanf("%d", &T); while (T--) { int n, k; scanf("%d%d", &n, &k); LL ans = 0; for (int i = 0; i <= n - k; i++) { LL tmp = C(n, i) * dp[i] % MOD; ans = (ans + tmp) % MOD; } printf("%lld\n", ans); } return 0;}
阅读全文
0 0
- FZU 2282 错排问题dp
- FZU 2282 错排
- FZU -- 2282 和 DHU -- 2049 【简单错排 + 组合数学】
- FZU 2282 Wand(错排+费马小定理)
- FZU 2282 Wand (组合数学 错排应用)
- FZU 2282 Wand(错排+费马小定理)
- HDU 2049 错排问题dp
- Codeforces 340E 错排问题dp
- FZU 2030 括号问题 dfs/dp
- FZU 1416 飞机加油问题(DP)
- FZU 2282Problem 2282 Wand(错排+快速幂+费马小定理)
- FZU 2282 Wand,利用扩展欧几里得求逆元快速求C(n,m) , 错排公式推导
- #个人赛第七场解题总结# (FZU 1881三角形问题 找规律 &&FZU 1884 排火车 模拟)
- FZU 2133 kk排座位
- 错排问题
- 错排问题
- 错排问题
- 错排问题
- 启动一个看不见的app
- float:right 不起 作用的 原因
- Android--使用原生技术实现ListView(原生技术实现网络异步请求,解析json数据)
- Number Sequence(HDU 1711 KMP)
- linux 日志管理、系统启动和备份恢复
- FZU 2282 错排问题dp
- python 网络爬虫报错“UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position”解决方案
- 语义化命名标签规则
- scala函数
- Java程序输出到JSP页面
- [Xamarin]删除Android及iOS控制端堆栈
- Android Studio debugger 灵活使用
- java 同步与异步的区别
- Cocos2d-js