题目描述

  $MYC$在$NOI2018$中,遇到了$day1T2$这样一个题,题目是让你求有多少“好”的排列。$MYC$此题没有获得高分,感到非常惭愧,于是回去专心研究排列了。如今数排列的题对$MYC$来说已经是小菜一碟了。于是$MYC$想考考你,扔给你了一个非常$naive$的数排列题给你。
  给定一个$\{0,1,2,3,...,n-1\}$的排列$p$。一个$\{0,1,2,...,n-2\}$的排列$q$被认为是优美的排列,当且仅当$q$满足下列条件:
  对排列$s=\{0,1,2,3,...,n-1\}$进行$n–1$次交换。
  $1.$交换$s[q_0],s[q_0+1]$
  $2.$交换$s[q_1],s[q_1+1]$
  ...
  最后能使得排列$s=p$。
  问有多少个优美的排列,答案对$10^9+7$取模。

原题见:$SRM517-600$


输入格式

第一行一个正整数$n$。
第二行$n$个整数代表排列$p$。


输出格式

仅一行表示答案。


样例

样例输入:

3
1 2 0

样例输出:

1


数据范围与提示

样例解释:

$q=\{0,1\}\{0,1,2\}\rightarrow\{1,0,2\}\rightarrow\{1,2,0\}$
$q=\{1,0\}\{0,1,2\}\rightarrow\{0,2,1\}\rightarrow\{2,0,1\}$

数据范围:

$20\%$:$n\leqslant 10$
$50\%$:$n\leqslant 50$
$70\%$:$n\leqslant 300$
$100\%$:$n\leqslant 5,000$


题解

题目可以转化为:一个大小为$n-1$的排列,某些地方限制了相邻两数的大小关系,求方案数。

考虑$DP$,设$dp[i][j]$表示进行到了第$i$个数,第$i$个数在前$i$个数中是第$j$小的方案数。

可以预处理出来哪些位置需要往左或右移即可。

注意一些限制,以向左移为例,第$i$次交换的位置要在第$i-1$次交换之前,反之同理。

这样做出来时间复杂度是$\Theta(n^3)$的,前缀和优化即可。

因为数据点没有给不满足的情况,所以下面代码中没有判不满足的情况,即$pos_i=i$。

时间复杂度:$\Theta(n^2)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
int n;
int a[5001];
bool com[5001];
long long dp[5001][5001],g[5001][5001];
long long ans;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
if(i<a[i]){com[i-1]=1;com[a[i]-1]=1;}
else for(int j=a[i];j<i-1;j++)com[j]=1;
dp[0][1]=g[0][1]=1;
for(int i=1;i<n-1;i++)
for(int j=1;j<=i+1;j++)
{
if(com[i-1])dp[i][j]=(dp[i][j]+g[i-1][i]-g[i-1][j-1]+mod)%mod;
else dp[i][j]=(dp[i][j]+g[i-1][j-1])%mod;
g[i][j]=(g[i][j-1]+dp[i][j])%mod;
}
for(int i=1;i<n;i++)ans=(ans+dp[n-2][i])%mod;
printf("%lld",ans);
return 0;
}

rp++

[CSP-S模拟测试]:毛二琛(DP)的更多相关文章

  1. 「10.13」毛一琛(meet in the middle)·毛二琛(DP)·毛三琛(二分+随机化???)

    A. 毛一琛 考虑到直接枚举的话时间复杂度很高,我们运用$meet\ in\ the\ middle$的思想 一般这种思想看似主要用在搜索这类算法中 发现直接枚举时间复杂度过高考虑枚举一半另一半通过其 ...

  2. [CSP-S模拟测试]:毛三琛(随机化+二分答案)

    题目传送门(内部题69) 输入格式 第一行正整数$n,P,k$.第二行$n$个自然数$a_i$.$(0\leqslant a_i<P)$. 输出格式 仅一个数表示最重的背包的质量. 样例 样例输 ...

  3. [CSP-S模拟测试]:毛一琛(meet in the middle)

    题目描述 历史学考后,$MYC$和$ztr$对答案,发现选择题他们没有一道选的是一样的.最后他们都考了个$C$.现在问题来了,假设他们五五开,分数恰好一样(问答题分数也恰好一样,只考虑选择题).已知考 ...

  4. NOIP 模拟 $30\; \rm 毛二琛$

    题解 \(by\;zj\varphi\) 原题问的就是对于一个序列,其中有的数之间有大小关系限制,问有多少种方案. 设 \(dp_{i,j}\) 表示在前 \(i\) 个数中,第 \(i\) 个的排名 ...

  5. [CSP-S模拟测试]:w(树上DP)

    题目背景 $\frac{1}{4}$遇到了一道水题,双完全不会做,于是去请教小$D$.小$D$看了${0.607}^2$眼就切掉了这题,嘲讽了$\frac{1}{4}$一番就离开了.于是,$\frac ...

  6. [CSP-S模拟测试]:B(期望DP)

    题目传送门(内部题151) 输入格式 第一行一个整数$N$. 第二行$N$个整数,第$i$个为$a_i$. 输出格式 一行一个整数,表示答案.为避免精度误差,答案对$323232323$取模. 即设答 ...

  7. [CSP-S模拟测试]:密码(数位DP+库默尔定理)

    题目描述 为了揭穿$SERN$的阴谋,$Itaru$黑进了$SERN$的网络系统.然而,想要完全控制$SERN$,还需要知道管理员密码.$Itaru$从截获的信息中发现,$SERN$的管理员密码是两个 ...

  8. [CSP-S模拟测试]:硬币(博弈论+DP+拓展域并查集)

    题目传送门(内部题135) 输入格式 第一行包含一个整数$T$,表示数据组数. 对于每组数据,第一行两个整数$h,w$,表示棋盘大小. 接下来$h$行,每行一个长度为$w$的字符串,每个位置由为$o, ...

  9. [CSP-S模拟测试]:军训队列(DP+乱搞)

    题目描述 有$n$名学生参加军训,军训的一大重要内容就是走队列,而一个队列的不规整程度是该队中最高的学生的身高与最矮的学生的身高差值的平方.现在要将$n$名参加军训的学生重新分成$k$个队列,每个队列 ...

随机推荐

  1. dotnet sdk 的镜像tag 相关

    https://hub.docker.com/_/microsoft-dotnet-core-sdk/ 微软的dotnet sdk 的 tag 微软貌似改默认镜像 dockerhub 里面的tag与 ...

  2. CentOS8 下 Redis5.0.7 哨兵Sentinel 模式配置指南

    下载Redis Redis下载链接 解压缩 tar -xzvf redis-5.0.7.tar.gz 编译安装 make和gcc依赖 可通过yum -y install gcc automake au ...

  3. 画一个心送给心爱的小姐姐,Python绘图库Turtle

    Python绘图库Turtle Turtle介绍 Turtle是Python内嵌的绘制线.圆以及其他形状(包括文本)的图形模块. 一个Turtle实际上是一个对象,在导入Turtle模块时,就创建了对 ...

  4. python是强语言还是弱语言?

    python是强语言还是弱语言,没有一个具体官方的说法 数据类型也就是变量类型,一般编程语言的变量类型可以分成下面两类. 静态类型与动态类型 静态类型语言:一种在编译期间就确定数据类型的语言.大多数静 ...

  5. django2.0变动数据库设置外键报错

    1.报错TypeError: __init__() missing 1 required positional argument: 'on_delete' django2.0以后创建数据库外键的时候必 ...

  6. 025-Cinder服务-->安装并配置一个本地存储节点(ISCSI)

    一:Cinder提供块级别的存储服务,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷.此服务也会激活管理卷的快照和卷类型的功能,块存储服务通常包含下列组件:cin ...

  7. GUI学习之二十七——布局管理学习总结

    今天讲一个大的内容——布局管理. 一.布局管理的诞生背景 在前面所讲的所有案例中,我们都是用采用手动布局的方式来布局的.结合个案例来说明一下:在一个界面上放三个label,三个label纵向排列 fr ...

  8. 最近关于Qt学习的一点碎碎念

    最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...

  9. 安装了vs2019 编译node-sass node-gyp 找不到编译器的解决方法

    1 新建powershell脚本文件 <# This is a workaround for "node-gyp is unable to find msbuild if VS2019 ...

  10. bzoj3011 [Usaco2012 Dec]Running Away From the Barn 左偏树

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3011 题解 复习一下左偏树板子. 看完题目就知道是左偏树了. 结果这个板子还调了好久. 大概已 ...