CF285 E Positions in Permutations——“恰好->大于”的容斥和允许“随意放”的dp
题目:http://codeforces.com/contest/285/problem/E
是2018.7.31的一场考试的题,当时没做出来。
题解:http://www.cnblogs.com/yanshannan/p/9410986.html
因为那个值对于 i 位置来说只和 i 位置放了 i-1 或 i+1 有关,所以状态里记录一下 i 和 i+1 有没有已经放过,再加上 i-1 的对于 i-1 和 i 的状态,就能转移了。
枚举这一位:放 i-1 /放 i+1/先空下。先空下对那个值无影响,所以可以做到;最后相当于指定了 j 个位置放什么值,剩下的位置乘上一个排列即可。
随便往空下的位置放可能导致多一些值,所以最后容斥一下即可。
注意初值赋给那个状态!
那场考试的其余信息就见 Zinn 的博客吧。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=,mod=1e9+;
int n,m,dp[N][N][][],jc[N],jcn[N],ans,f[N];
int pw(int x,int k)
{int ret=;while(k){if(k&1ll)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=1ll;}return ret;}
void init()
{
jc[]=; for(int i=;i<=n;i++) jc[i]=(ll)jc[i-]*i%mod;
jcn[n]=pw(jc[n],mod-);
for(int i=n-;i>=;i--) jcn[i]=(ll)jcn[i+]*(i+)%mod;
}
void upd(int &x){x-=(x>=mod?mod:);}
int C(int n,int m){return (ll)jc[n]*jcn[m]%mod*jcn[n-m]%mod;}
int main()
{
scanf("%d%d",&n,&m);
init();
dp[][][][]=;//so pos1 can't 0!!!!!!
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)//n
for(int k=;k<=;k++)
{
dp[i][j][k][]=dp[i-][j][][k]+dp[i-][j][][k],
upd(dp[i][j][k][]);//rand
if(j)dp[i][j][k][]=dp[i-][j-][][k]+dp[i-][j-][][k],
upd(dp[i][j][k][]),//i+1
dp[i][j][k][]+=dp[i-][j-][][k],
upd(dp[i][j][k][]);//i-1
}
for(int i=m;i<=n;i++)
f[i]=(ll)(dp[n][i][][]+dp[n][i][][])*jc[n-i]%mod;
ans=f[m];
for(int i=m+,fx=-;i<=n;i++,fx=-fx)
ans+=(ll)f[i]*C(i,i-m)%mod*fx,ans+=(fx==?:mod),upd(ans);
printf("%d\n",ans);
return ;
}
CF285 E Positions in Permutations——“恰好->大于”的容斥和允许“随意放”的dp的更多相关文章
- 【CF285E】Positions in Permutations(动态规划,容斥)
[CF285E]Positions in Permutations(动态规划,容斥) 题面 CF 洛谷 题解 首先发现恰好很不好算,所以转成至少,这样子只需要确定完一部分数之后剩下随意补. 然后套一个 ...
- codeforces 340E Iahub and Permutations(错排or容斥)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Iahub and Permutations Iahub is so happy ...
- CodeForces - 285E: Positions in Permutations(DP+组合数+容斥)
Permutation p is an ordered set of integers p1, p2, ..., pn, consisting of n distinct positive in ...
- Codeforces 285 E. Positions in Permutations
\(>Codeforces \space 285 E. Positions in Permutations<\) 题目大意 : 定义一个长度为 \(n\) 的排列中第 \(i\) 个元素是 ...
- 【做题】CF285E. Positions in Permutations——dp+容斥
题意:求所有长度为\(n\)的排列\(p\)中,有多少个满足:对于所有\(i \,(1 \leq i \leq n)\),其中恰好有\(k\)个满足\(|p_i - i| = 1\).答案对\(10^ ...
- 【CF715E】Complete the Permutations(容斥,第一类斯特林数)
[CF715E]Complete the Permutations(容斥,第一类斯特林数) 题面 CF 洛谷 给定两个排列\(p,q\),但是其中有些位置未知,用\(0\)表示. 现在让你补全两个排列 ...
- Codeforces 285E - Positions in Permutations(二项式反演+dp)
Codeforces 题目传送门 & 洛谷题目传送门 upd on 2021.10.20:修了个 typo( 这是一道 *2600 的 D2E,然鹅为啥我没想到呢?wtcl/dk 首先第一步我 ...
- CF285E Positions in Permutations(dp+容斥)
题意,给定n,k,求有多少排列是的 | p[i]-i |=1 的数量为k. Solution 直接dp会有很大的后效性. 所以我们考虑固定k个数字使得它们是合法的,所以我们设dp[i][j][0/1] ...
- CF285E Positions in Permutations
思路 dp+二项式反演的神题 就是dp部分非常麻烦(好吧是我傻了 考虑先钦定m个满足条件的位置,这m个\(x_i\),只能放\(x_i-1\)或\(x_i+1\),然后其他的随便放(得出至少m个的方案 ...
随机推荐
- 【转】2018年EI收录中文期刊目录
序号 中文刊名 收录情况 1 声学学报 保持收录 2 航空学报 保持收录 3 兵工学报 保持收录 4 自动化学报 保持收录 5 电子学报 保持收录 6 太阳能学报 保持收录 7 测绘学报 保持收录 8 ...
- 输入一个n,输出2到n的详细素数值
#include<stdio.h> #include<algorithm> #include<cmath> int judge(int a) { int j; fo ...
- hibernate的一级缓存和二级缓存详解
hibernate为我们提供了一级缓存和二级缓存,目的是为了减少应用程序对数据库的访问次数. 一级缓存: (1)所谓一级缓存就是session级别的缓存,当我们使用他的范围是当前的session,当s ...
- PS CC 破解安装教程(亲测可用)
PS CC版本新增了一些更高效的切图工具,比如可以直接右击图层转化为PNG图像 下面介绍一种亲测可用的破解安装教程 软件下载地址:https://pan.baidu.com/s/1dFJFqhj 一. ...
- JAVA中两个Set比较找出交集、差集、并集
当做到某些功能的时候,使用Set能够快速方便地将需要的类型以集合类型保存在一个变量中,Set是最简单的一种集合,集合中的对象不按特定的方式排序,并且没有重复对象. //两个Set比较找出交集.差集.并 ...
- PowerBuilder -- 变更某列的背景色
记得把background.mode设置为2 li_col++ ls_col[li_col] = ls_fit_no ls_column = ' col' + String(li_col) ls_co ...
- 目标检测之hog(梯度方向直方图)---hog简介0
梯度直方图特征(HOG) 是一种对图像局部重叠区域的密集型描述符, 它通过计算局部区域的梯度方向直方图来构成特征.Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功 ...
- ios和mac开发 学习资料
1.WWDC14 Session 409 学习笔记: http://url.cn/Ju2Yt5 2..WWDC14 Session 4092学习笔记: http://url.cn/Rx0mAN 3.i ...
- iOS界面-仿网易新闻左侧抽屉式交互 续(添加新闻内容页和评论页手势)
本文转载至 http://blog.csdn.net/totogo2010/article/details/8637430 1.介绍 有的博友看了上篇博文iOS界面-仿网易新闻左侧抽屉 ...
- 【BZOJ4999】This Problem Is Too Simple! 离线+树状数组+LCA
[BZOJ4999]This Problem Is Too Simple! Description 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: 1. C i x(0<=x<2 ...