swap(2018.10.16)
题意:给定一个{0,1,2,3,…,n-1}的排列 p。
一个{0,1,2 ,…,n-2}的排列 q 被认为是优美的排列,
当且仅当 q 满足下列条件 对排列 s={0,1,2,3,...,n-1}进行 n–1 次交换。
- 交换 s[q0],s[q0+1]
- 交换 s[q1],s[q1+1]
…
最后能使得排列 s=p. 问有多少个优美的排列,答案对 10^9+7 取模。
( n<=5000)
题解:这个题我们首先要知道一个性质,p排列的每一个数都是s排列经过变换后的最后状态,我们就能通过这些推出q数组中一些数的先后顺序
然后通过这些我们就可以做dp了,f[i][j]表示前i个数,第i个数在前i个数中是第j小的。前缀和优化。时间复杂度:\(O(n^2)\)
我讲的可能不是太好,安利机房一位学长的一篇博客:大佬的博客
#include<cstdio>
#include<algorithm>
using namespace std;
int n,p[5001],ans,pos[5001],mod=1e9+7,f[5001][5001],g[5001][5001];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&p[i]),p[i]++;
for(int i=1;i<=n;i++)
if(p[i]>i)
{
if(i>1)if(pos[i-1]==1){printf("0\n");return 0;}else pos[i-1]=2;
for(int j=i;j<p[i]-1;j++)if(pos[j]==2){printf("0\n");return 0;}else pos[j]=1;
if(p[i]-1<=n-2)if(pos[p[i]-1]==1){printf("0\n");return 0;}else pos[p[i]-1]=2;
}
else if(p[i]<i)
{
if(p[i]>1)if(pos[p[i]-1]==2){printf("0\n");return 0;}else pos[p[i]-1]=1;
for(int j=p[i];j<i-1;j++)if(pos[j]==1){printf("0\n");return 0;}else pos[j]=2;
if(i-1<=n-2)if(pos[i-1]==2){printf("0\n");return 0;}else pos[i-1]=1;
}
f[1][1]=g[1][1]=1;
for(int i=2;i<n;i++)
for(int j=1;j<=i;j++)
{
if(pos[i-1]==1)f[i][j]=(f[i][j]+g[i-1][j-1])%mod;
if(pos[i-1]==2)f[i][j]=((f[i][j]+g[i-1][i-1]-g[i-1][j-1])%mod+mod)%mod;
g[i][j]=(g[i][j-1]+f[i][j])%mod;
}
for(int i=1;i<n;i++)ans=(ans+f[n-1][i])%mod;
printf("%d\n",ans);
}
swap(2018.10.16)的更多相关文章
- 2018.10.16 uoj#340. 【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂优化dp)
传送门 一道不错的矩阵快速幂优化dpdpdp. 设f[i][j][k][l]f[i][j][k][l]f[i][j][k][l]表示前iii轮第iii轮还有jjj个一滴血的,kkk个两滴血的,lll个 ...
- 在 .NET项目中使用 Redis(2018.10.16)
1. 打开NuGet管理器搜索redis,安装:“StackExchange.Redis” 2. 配置 Web.config 文件 <connectionStrings> <add ...
- 2018.10.16 spoj Can you answer these queries V(线段树)
传送门 线段树经典题. 就是让你求左端点在[l1,r1][l1,r1][l1,r1]之间,右端点在[l2,r2][l2,r2][l2,r2]之间且满足l1≤l2,r1≤r2l1\le l2,r1 \l ...
- 2018.10.16 NOIP模拟 长者(主席树+hash)
传送门 考试的时候开始sb的以为需要可持久化trietrietrie树,发现建树时空都是O(n2)O(n^2)O(n2)的. 然后发现由于每次只从原来的字符串改一个字符. 因此直接主席树维护区间has ...
- 2018.10.16 NOIP模拟 华莱士(并查集)
传送门 按照题意模拟维护最小的环套树森林就行了. 然而考试的时候naivenaivenaive瞎写了一个错误的贪心. 代码
- 2018.10.16 NOIP模拟 膜法(组合数学)
传送门 原题,原题,全TM原题. 不得不说天天考原题. 其实这题我上个月做过类似的啊,加上dzyodzyodzyo之前有讲过考试直接切了. 要求的其实就是∑i=lr(ii−l+k)\sum _{i=l ...
- 2018.10.16 NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...
- 2018.10.16 Java的IO与NIO
IO流学习总结 一 Java IO,硬骨头也能变软 二 java IO体系的学习总结 三 Java IO面试题 NIO与AIO学习总结 一 Java NIO 概览 二 Java NIO 之 Buffe ...
- moiezen(2018.10.16)
题意:有n件行李,编号为1~n.行李的质量是模 P 意义下的(P不一定是质数).有 k 个背包,要装下这些行李,为了方便在背包中找行李,每个背包中的行李编号是连续的,允许有背包为空.我们想让最重的背包 ...
随机推荐
- spawn类参数command详解
我们主要来看spawn类它的构造方法参数主要有command,从字面上就是指spawn类的子程序用来执行的子程序,也就是系统所能够执行的相应的命令,对于command这个参数,我们是以字符串的方式给出 ...
- 【网络基础系列二】BOOTP、DHCP协议
BOOTP 含义:BOOT Protocol,引导协议 作用:引导无盘计算机或者第一次启动的计算机获取以下网络配置信息: 主机的IP地址.子网掩码 路由器(网关)的IP地址 DNS服务器IP地址 C/ ...
- Hexo建站过程总结
Hexo 是一个基于 Node.js 快速.简洁且高效的博客框架,可以将 Markdown 文件快速的生成静态网页,托管在 GitHub Pages 上. 由于原来博客的主机费用问题,我没有办法再在那 ...
- [haoi2011]a
一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) 题解:首先,由每个人说的话的内容,我们可以理解为他处在ai+1,n-bi ...
- HTTP1.0 与HTTP2.0的区别
一.多路复用 HTTP2.0 使用了多路复用技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级. 二.数据压缩 HTTP1.1不支持header数据压缩,HTTP ...
- zabbix数据库创建初始化
MariaDB [(none)]> create database zabbix character set utf8; MariaDB [(none)]> grant all privi ...
- HTML,CSS 无边框桌面窗口
1. [图片] htmlui.jpg 2. [代码]下面源码复制到快手(WWW.AAU.CN)中运行即可 import win.ui;/*DSG{{*/var winform = ..win ...
- java推荐书籍及下载
前言 一直有这么个想法,列一下我个人认为在学习和使用Java过程中可以推荐一读的书籍,给初学者或者想深入的朋友一些建议,帮助成长.推荐的的都是我自己读过,也会推荐一些朋友读过并且口碑不错的书籍.以下的 ...
- codevs 1154 能量项链
传送门 1154 能量项链 2006年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在Mars星 ...
- No result defined for action cn.crm.action.LinkManAction and result input
这是struts2的一个拦截器报的错误,当你的form中的数据有问题,比如说<input type="text" name="receiverLoginID&quo ...