[abc309 G] Ban Permutation
G - Ban Permutation
首先看到绝对值,很烦,考虑取掉绝对值得到\(p_i\leq i-X\)或\(p_i\geq i+X\)
然后我们就自然而然有了一个暴力的想法,设\(dp[i][s]\)表示前\(i\)个数选了的数的状态为\(S\),然后空间复杂度是\(O(N2^N)\)的,时间复杂度也是\(O(N2^N)\)的
这也太暴力了8,考虑优化
发现\(s\)这一维无论如何也优化不了,考虑减小它的状态数,我们先将\(dp[i][s]\)重新定义前\(i\)个的\(1\sim i-X\)和\(i+x\sim N\)的选取状态,然后这样\(2^N\)就减小为了\(2^{N-2X+1}\)
然后我们又发现\(X\leq5\),非常的小!所以我们考虑将\(dp[i][s]\)再次重新定义为前\(i\)个的\(i-X+1\sim i+X-1\)的选取状态,发现这样,我们似乎就只能转移得到不合法的状态,但是这样我们的时空复杂度都是\(O(N2^{2X-1})\)的,可以过
所以我们考虑容斥,\(ans=\sum_{i=0}^n (n-i)!\times val(i)\),\(i\)表示我们钦定了\(i\)个不合法的数
然后考虑\(val(i)\)怎么整,显然我们只需要给\(dp[i][s]\)再加上一维变成\(dp[i][j][s]\)表示前\(i\)个,有\(j\)个不合法的,目前\(i-X+1\sim i+X-1\)的选取状态
那么\(val(i)\)就等于\(\sum_{s=0}^{2^{2X-1}}dp[n][i][s]\)
然后就可以完结撒花了 *★,°*:.☆( ̄▽ ̄)/$:*.°★* 。
#include<bits/stdc++.h>
using namespace std;
const int N=105,MOD=998244353;
int n,x,dp[N][N][1<<9],lim,ans,jc[N],val[N];
void add(int &x,int y){ x+=y; if(x>=MOD) x-=MOD; if(x<0) x+=MOD; }
int ad(int x,int y){ x+=y; if(x>=MOD) x-=MOD; return x; }
void Init(){
lim=(1<<((x<<1)-1))-1;
jc[0]=1;
for(int i=1;i<=n;++i) jc[i]=1ll*jc[i-1]*i%MOD;
}
int main(){
scanf("%d%d",&n,&x),Init();
dp[0][0][0]=1;
for(int i=0;i<n;++i)
for(int j=0;j<=i;++j)
for(int s=0;s<=lim;++s){
int now=s>>1;
add(dp[i+1][j][now],dp[i][j][s]);
int up=min((i+1)+x-1,n)-((i+1)-x+1),down=max(1,(i+1)-x+1)-((i+1)-x+1);
for(int k=down;k<=up;++k) if(!(now>>k&1)) add(dp[i+1][j+1][now|(1<<k)],dp[i][j][s]);
}
for(int i=0;i<=n;++i) for(int s=0;s<=lim;++s) add(val[i],dp[n][i][s]);
for(int i=0;i<=n;++i) add(ans,((i&1)?-1ll:1ll)*jc[n-i]%MOD*val[i]%MOD);
printf("%d",ans);
return 0;
}
[abc309 G] Ban Permutation的更多相关文章
- AtCoder Beginner Contest 282 G - Similar Permutation
套路题 题意 求有多少个 \(1\) 到 \(n\) 的排列满足恰有 \(k\) 对在排列中相邻的数满足前小于后 \(2 \leq n \leq 500, 0 \leq k \leq (n - 1)\ ...
- Codeforces 700 C. Break Up(Tarjan求桥)
题意 给你一个有 \(n\) 个点, \(m\) 条边的无向图,每条有边权 \(w_i\) ,现在要选择至多两条边断开,使得 \(S, T\) 不连通,并且使得边权和尽量小. \(n \le 1000 ...
- 拯救大兵瑞恩 HDU - 4845(状压bfs || 分层最短路)
1.状压bfs 这个状压体现在key上 我i们用把key状压一下 就能记录到一个点时 已经拥有的key的种类 ban[x1][y1][x2][y1]记录两个点之间的状态 是门 还是墙 还是啥都没有 ...
- JZOJ 3223. 【HBOI2013】Ede的新背包问题
3223. [HBOI2013]Ede的新背包问题 (Standard IO) Time Limits: 2000 ms Memory Limits: 262144 KB Detailed Lim ...
- CF #640 (div4)
CF640 div4 草 迟到半个月的补题 真正的懒狗 再懒就无了 D. Alice, Bob and Candies 题意:n个数字,奇数时间从左侧删数字,偶数时间从右侧删数字,每次删的数字之和必须 ...
- Codeforces Round #640 (Div. 4)
比赛链接:https://codeforces.com/contest/1352 A - Sum of Round Numbers 题意 将一个十进制数的每一个非零位分离出来. 代码 #include ...
- Storyboards Tutorial 03
这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...
- 文件图标SVG
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink ...
- Permutation test: p, CI, CI of P 置换检验相关统计量的计算
For research purpose, I've read a lot materials on permutation test issue. Here is a summary. Should ...
- BZOJ3746 : [POI2015]Czarnoksiężnicy okrągłego stołu
NOIP前做了几道POI,现在终于能在BZOJ上提交了… 交上去最后几个点WA,看了数据发现p=0的特判错了… p=0,1时特判 p=2时构造两种情况判断 p=3时不考虑1的座位进行DP 可以发现对于 ...
随机推荐
- RANSAC---从直线拟合到特征匹配去噪
Ransac全称为Random Sample Consensus,随机一致性采样.该方法是一种十分高效的数据拟合方法.我们通过最简单的拟合直线任务来了解这种方法思路,继而扩展到特征点匹配中的误点剔除问 ...
- 全国省市区基础数据SQL插入脚本
整理了一份全国省市区SQL插入脚本,并配上抓取数据读取插入数据库源码,附件下载地址:https://files.cnblogs.com/files/101Love/Region.rar
- 深入理解Hadoop读书笔记-4
背景 公司的物流业务系统目前实现了使用storm集群进行过门事件的实时计算处理,但是还有一个需求,我们需要存储每个标签上传的每条明细数据,然后进行定期的标签报表统计,这个是目前的实时计算框架无法满足的 ...
- 【Web】Servlet三大作用域、JSP四大作用域
request 生命周期: 创建:客户端向服务器发送一次请求,服务器就会创建request对象. 销毁:服务器对这次请求作出响应后就会销毁request对象. 有效:仅在当前请求中有效. 作用:常用于 ...
- leetcode每日一题:k-avoiding 数组的最小总和
引言 今天是本次开始坚持leetcode每日1题的第10天,也算是迈出了一小步. 题目 2829. k-avoiding 数组的最小总和 给你两个整数 n 和 k . 对于一个由 不同 正整数组成 ...
- datasnap的Restful的接口方法
//Restful接口测试 //GET function Test(Value: string): string; //POST function updateTest(Value: string; ...
- python,设置windows系统时间
老笔记本纽扣电池没电了,每次拔掉电源再重新开机时间就对不上了,然后写个python脚本开机后执行对时吧 脚本直接网上复制的,比较简单,貌似时访问www.baidu.com获取头信息里的时间,然后设置为 ...
- 至美!看AXUI如何美化原始HTML标签(reset/normalize)
前言:不只是重置,而是重塑 在前端开发中,我们每天都会接触大量的原生 HTML 标签,例如 <button>.<input>.<a>.<table>.& ...
- EFCore Study(番外1)——单向导航属性
一.单向导航属性场景 1.比如公司OA系统有很多相关的审批流程,比如离职(Leave).请假(relex).加班,每个流程都有多级审批人,每个审批人都是User 一个人(User)--多个审批流程的多 ...
- CentOS7搭建XSS平台
我的服务器是CentOS7.8 1.安装php 7 CentOS7的默认PHP版本是PHP5,但是如果我们要安装PHP7,不需要将现有的PHP5删除,只要将PHP升级到PHP7即可. 使用 yum p ...