【CF285E】Positions in Permutations
刷水题涨信心
显然这是个广义容斥,我们现在算一下至少有\(i\)个完美数的方案数就好了
这\(1000\)的数据范围显然在暗示\(n^2\)的dp
我们注意到这个条件大概就是\(P_i=i-1\)或\(P_i=i+1\),于是我们可以想象成左右两边各\(n\)个点去完成一个一一匹配
设\(dp[i][j][k][p]\)表示左边第\(i\)个数已经匹配完了,一共形成了\(j\)对完美数,\(k\)表示右边对应的第\(i\)个位置的使用状态\(0/1\),\(p\)表示右边第\(i+1\)个数的使用状态
转移显然
代码
#include<cstdio>
#define re register
const int mod=1e9+7;
const int maxn=1005;
int n,m,tot;
int dp[maxn][maxn][2][2],ans[maxn];
int c[maxn][maxn],fac[maxn];
int main() {
	scanf("%d%d",&n,&m);fac[0]=1;
	for(re int i=0;i<=n;i++) c[i][0]=c[i][i]=1;
	for(re int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%mod;
	for(re int i=2;i<=n;i++)
		for(re int j=1;j<i;j++) c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
	dp[1][0][0][0]=1,dp[1][1][0][1]=1;
	for(re int i=1;i<n;i++)
		for(re int j=0;j<=i;j++)
			for(re int k=0;k<2;k++)
				for(re int p=0;p<2;p++) {
					if(!dp[i][j][k][p]) continue;
					dp[i+1][j+1][p][1]=(dp[i+1][j+1][p][1]+dp[i][j][k][p])%mod;
					if(!k) dp[i+1][j+1][p][0]=(dp[i+1][j+1][p][0]+dp[i][j][k][p])%mod;
					dp[i+1][j][p][0]=(dp[i+1][j][p][0]+dp[i][j][k][p])%mod;
				}
	for(re int i=0;i<=n;i++)
		ans[i]=(dp[n][i][0][0]+dp[n][i][1][0])%mod;
	for(re int j=m;j<=n;j++)
		tot=(tot+1ll*((j-m)&1?-1:1)*c[j][m]*fac[n-j]%mod*ans[j]%mod)%mod;
	printf("%d\n",(tot+mod)%mod);
	return 0;
}
												
											【CF285E】Positions in Permutations的更多相关文章
- 【CF285E】Positions in Permutations(动态规划,容斥)
		
[CF285E]Positions in Permutations(动态规划,容斥) 题面 CF 洛谷 题解 首先发现恰好很不好算,所以转成至少,这样子只需要确定完一部分数之后剩下随意补. 然后套一个 ...
 - 【CF715E】Complete the Permutations(容斥,第一类斯特林数)
		
[CF715E]Complete the Permutations(容斥,第一类斯特林数) 题面 CF 洛谷 给定两个排列\(p,q\),但是其中有些位置未知,用\(0\)表示. 现在让你补全两个排列 ...
 - 【CF715E】Complete the Permutations 第一类斯特林数
		
题目大意 有两个排列 \(p,q\),其中有一些位置是空的. 你要补全这两个排列. 定义 \(s(p,q)\) 为 每次交换 \(p\) 中的两个数,让 \(p=q\) 的最小操作次数. 求 \(s( ...
 - 【cdq分治】【CF1093E】 Intersection of Permutations
		
传送门 果然前两天写完咕咕咕那个题的题解以后博客就开始咕咕咕了-- Description 给定整数 \(n\) 和两个 \(1~\sim~n\) 的排列 \(A,B\). \(m\) 个操作,操作有 ...
 - 【LeetCode】Permutations 解题报告
		
全排列问题.经常使用的排列生成算法有序数法.字典序法.换位法(Johnson(Johnson-Trotter).轮转法以及Shift cursor cursor* (Gao & Wang)法. ...
 - 【CF736D】Permutations 线性代数+高斯消元
		
[CF736D]Permutations 题意:有一个未知长度为n的排列和m个条件,第i个条件$(a_i,b_i)$表示第$a_i$个位置上的数可以为$b_i$.保证最终合法的排列的个数是奇数.现在有 ...
 - 【LeetCode】Permutations II 解题报告
		
[题目] Given a collection of numbers that might contain duplicates, return all possible unique permuta ...
 - 【UVA 11077】 Find the Permutations (置换+第一类斯特林数)
		
Find the Permutations Sorting is one of the most used operations in real life, where Computer Scienc ...
 - 【题解】POJ2279 Mr.Young′s Picture Permutations dp
		
[题解]POJ2279 Mr.Young′s Picture Permutations dp 钦定从小往大放,然后直接dp. \(dp(t1,t2,t3,t4,t5)\)代表每一行多少人,判断边界就能 ...
 
随机推荐
- Vue.js小游戏:测试CF打狙速度
			
此项目只测试反应速度,即手点击鼠标的反应速度 html代码 <div id="top">请等待图片变颜色,颜色便的那一刻即可点击测手速</div> < ...
 - Binary XML file line #23: Error inflating class android.widget.TextView
			
分析一波,报错23行TextView的问题,但是检查了xml没有发现23行又TextView相关代码,就不应该继续纠结xml了,代码是通过R文件拿到xml资源的,你就应该怀疑是R文件的问题,R文件编译 ...
 - Codeforces Round #563 (Div. 2) F. Ehab and the Big Finale
			
后续: 点分治标程 使用father数组 比使用vis数组优秀(不需要对vis初始化) https://codeforces.com/problemset/problem/1174/F https:/ ...
 - WifiManager Wifi 管理器&&知识点
			
WifiManager 主要使用的技术: SimpleWifi,MahaApp.Metro控件 一 网卡设置 1.获取所有网卡(NetWorkAdapter类) 方法A 通过API SELECT * ...
 - 初识Qgis
			
折腾了一天,qgis终于能在跟了自己8年的本本上顺利打开了,官网先后下载了3.8和3.4版本的都出现了同样的问题,"could not load qgis_app.dll",goo ...
 - 2019亚太内容分发大会,阿里云获CDN领袖奖、技术突破奖
			
近日,亚太CDN产业联盟主办的2019亚太内容分发大会在上海召开.本次大会以"5G分发"为主题,集结了CDN领域近千名行业领袖.专家参与.在会上,阿里云斩获“CDN领袖奖”.“技术 ...
 - docker中国区镜像加速
			
[root@syzyy ~]# vim /etc/docker/daemon.json { "registry-mirros":[ "https://registry.d ...
 - System.Math.cs
			
ylbtech-System.Math.cs 1. 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c56193 ...
 - .NETFramework:template
			
ylbtech-.NETFramework: 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://y ...
 - Java程序员注意:Tomcat Get请求的巨坑!
			
Tomcat8.5,当Get请求中包含了未经编码的中文字符时,会报以下错误,请求未到应用程序在Tomcat层就被拦截了. Tomcat报错: java.lang.IllegalArgumentExce ...