Codeforces 886E Maximum Element 组合数学 + dp
我们定义dp[ i ]表示长度为 i 的序列, 最后没有一个==k的时候返回的方案数, 也就是最后强制返回 i 的方案数。
我们能得到dp方程 dp[ i ] = sum(dp[ i - j - 1 ] * comb(i - 1, j) * F[ j ]) 0 <= j <= k - 1,
然后会发现这个东西不好转移, 我们可以把comb(i - 1, j) * F[ j ] 这个东西合并一下变成 F(i - 1) / F(i - 1 - j)
然后就变成 dp[ i ] = F(i - 1) * sum(dp[ i - j - 1] / F(i - j - 1)) 0 <= j <= k - 1, 然后这个东西存个前缀和就好啦。
有了dp数组之后, 我们就算出最后答案等于 n 的方案数, 从总方案数里面减去就好啦。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ull unsigned long long using namespace std; const int N = 1e6 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = ;
const double eps = 1e-;
const double PI = acos(-); void add(int &a, int b) {
a += b; if(a >= mod) a -= mod;
} int Power(int a, int b) {
int ans = ;
while(b) {
if(b & ) ans = 1LL * ans * a % mod;
a = 1ll * a * a % mod; b >>= ;
}
return ans;
} int n, k, way, dp[N], prefix[N];
int F[N], Finv[N], inv[N], tmp, ans; int comb(int n, int m) {
if(n < m || n < ) return ;
return 1ll * F[n] * Finv[m] % mod * Finv[n - m] % mod;
} int main() {
inv[] = F[] = Finv[] = ;
for(int i = ; i < N; i++) inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;
for(int i = ; i < N; i++) F[i] = 1ll * F[i - ] * i % mod;
for(int i = ; i < N; i++) Finv[i] = 1ll * Finv[i - ] * inv[i] % mod;
scanf("%d%d", &n, &k);
for(int i = ; i <= k; i++) {
dp[i] = F[i];
prefix[i] = (prefix[i - ] + 1ll * dp[i] * Finv[i] % mod) % mod;
}for(int i = k + ; i <= n; i++) {
dp[i] = (prefix[i - ] - prefix[i - k - ] + mod) % mod;
dp[i] = 1ll * dp[i] * F[i - ] % mod;
prefix[i] = (prefix[i - ] + 1ll * dp[i] * Finv[i] % mod) % mod;
}
ans = F[n];
add(ans, mod - dp[n]);
for(int i = ; i <= n - k; i++) {
add(ans, mod - (1ll * comb(n - , i - ) * dp[i - ] % mod * F[n - i] % mod));
}
printf("%d\n", ans);
return ;
} /*
*/
Codeforces 886E Maximum Element 组合数学 + dp的更多相关文章
- Codeforces 889C Maximum Element(DP + 计数)
题目链接 Maximum Element 题意 现在有这一段求序列中最大值的程度片段: (假定序列是一个1-n的排列) int fast_max(int n, int a[]) { int ans ...
- Codeforces - 702A - Maximum Increase - 简单dp
DP的学习计划,刷 https://codeforces.com/problemset?order=BY_RATING_ASC&tags=dp 遇到了这道题 https://codeforce ...
- Codeforces 375B Maximum Submatrix 2 (DP)
<题目链接> 题目大意:给出一个01矩阵,行与行之间可以互换位置,问能够得到最大的全1矩阵的面积. #include <bits/stdc++.h> using namespa ...
- Codeforces 332B Maximum Absurdity(DP+前缀和处理)
题目链接:http://codeforces.com/problemset/problem/332/B 题目大意:给你n个数和一个整数k,要求找到不相交的两个长度为k的区间,使得区间和最大,输出这两个 ...
- Codeforces - 102222A - Maximum Element In A Stack - 模拟
https://codeforc.es/gym/102222/problem/F 注意到其实用unsigned long long不会溢出. #include<bits/stdc++.h> ...
- 【CF886E】Maximum Element DP
[CF886E]Maximum Element 题意:小P有一个1-n的序列,他想找到整个序列中最大值的出现位置,但是他觉得O(n)扫一遍太慢了,所以它采用了如下方法: 1.逐个遍历每个元素,如果这个 ...
- 【CodeForces】889 C. Maximum Element 排列组合+动态规划
[题目]C. Maximum Element [题意]给定n和k,定义一个排列是好的当且仅当存在一个位置i,满足对于所有的j=[1,i-1]&&[i+1,i+k]有a[i]>a[ ...
- Codeforces 484B Maximum Value(高效+二分)
题目链接:Codeforces 484B Maximum Value 题目大意:给定一个序列,找到连个数ai和aj,ai%aj尽量大,而且ai≥aj 解题思路:类似于素数筛选法的方式,每次枚举aj,然 ...
- 【uoj#22】[UR #1]外星人 组合数学+dp
题目描述 给你一个长度为 $n$ 的序列 $\{a_i\}$ 和一个数 $x$ ,对于任意一个 $1\sim n$ 的排列 $\{p_i\}$ ,从 $1$ 到 $n$ 依次执行 $x=x\ \tex ...
随机推荐
- Linux自动人机交互expect
exp_test.sh文件 #!/bin/bash/expect ## exp_test.sh set timeout -; spawn ssh localhost; expect { "( ...
- maven:手动安装JAR到本地仓库
mvn install:install-file -DgroupId=com.test -DartifactId=test -Dversion=1.0.0 -Dpackaging=jar -Dfile ...
- docker的安装及使用
准备工具: 系统:ubuntu18.04 docker软件包:docker-compose.tar.gz,containerd.io_1.2.4-1_amd64.deb,docker-ce-cli_1 ...
- 《Spring5官方文档》新功能(4,3)
<Spring5官方文档>新功能 原文链接 译者:supriseli Spring框架的新功能 这一章主要提供Spring框架新的功能和变更. 升级到新版本的框架可以参考.Spring g ...
- Android Apk 瘦身大法
原文地址: https://mp.weixin.qq.com/s/XS0tuLgTfyp4rW4h69wyQQ 一, 我们在多人开发项目 或者 遗留项目中开发时,会有些自己没用到的资源文件,但是自己也 ...
- IBM X 3650 M3服务器RAID0设置
1 进入磁盘整列设置窗口 1.1 开机在提示符页面下按[F1]进入BIOS设置 1.2 依次进入子菜单[System Settings]à[Adapters and UEFI Drivers] 1.3 ...
- 缺失dll的问题
不小心运行一下什么程序就会出现缺失xxx.dll的问题,太烦了,遇到好多,一直没有记录.现在开始记录,以便日后查看~ 1. api-ms-win-crt-runtime-l1-1-0.dll 64位系 ...
- Confluence 6 配置推荐更新邮件通知默认的初始化设置
Confluence 为订阅者发送常规邮件报告,这个邮件报告中包含有用户具有查看权限的空间的最新的内容.这个被称为 推荐更新(Recommended Updates)通知. 如果你具有 Conflue ...
- Confluence 6 升级自定义的站点和空间获得你的自定义布局
我们建议你在对站点进行布局修改的时候,你需要为你修改的 Confluence 站点或空间布局保留所有的修改记录. 如果没有的话,你应该可以通过下面的办法找到你的自定义修改.这个方法将会把你对全部网站和 ...
- LeetCode(89):格雷编码
Medium! 题目描述: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印格雷码序列.格雷码序列必须以 0 开头. 例如,给定 ...