地精部落

题目链接:ybt金牌导航1-2-6 / luogu P2467

题目大意

有一个排列,要使得每个位置要么都比两边高,要么比两边低。

而且一定要以一高一低的方式排列。

两边的只用比旁边的那个高或低就可以。

给出排列的长度 n 和模数,要你求出排列的种数在模数取模意义下的值。

思路

我们考虑设 \(f_{i,j}\) 为前 \(i\) 个数的排列,最后一个数是高的,然后是 \(j\) 会有的方案数。

那我们可以发现有几个特点:

  1. 高低高低和低高低高这两种形状的类型种数都是相同的。

    因为你可以把 \(a_1,b_1,a_2,b_2,a_3\) 看成 \(n-a_1+1,n-b_1+1,n-a_2+1,n-b_2+1,n-a_3+1\)。

    那这个既是另一种类型了。
  2. 如果一个排列已经是满足的了,而且 \(i\) 和 \(i+1\) 不相邻。那我们可以把他们互换,还是合法的。就因为他们不相邻,那它们就算交换了,它们还是原来的高低状态,就没有问题。

那我们可以求以高结尾的方案数,然后再输出乘 \(2\) 即可。

那怎么求高结尾的呢?

考虑根据上面的特点搞转移方程。

\(f_{i,j}=f_{i,j-1}+f_{i-1,n-j+1}\)

为什么呢?

按相不相邻来分开,不相邻的就可以交换直接形成新的波动,那就是把 \(j\) 和 \(j-1\) 交换所能有的方案数,就是 \(f_{i,j-1}\)。

那我们考虑如果相邻,是怎么样的。

那它就变成了 前 \(i-1\) 个数的排列,\(j-1\) 是最后一个,且是山谷的情况。因为这样你就可以直接让 \(j+1\sim i-1\) 的区间的数都加一(因为是相对的关系,加了之后还是满足高低关系),然后再在最后的位置把 \(j\) 插进去。

那你由前面可以知道,你前面是山谷,那你要把山谷改成山峰,那第二位就要变成 \((i-1)-(j-1)+1\),即 \(i - j+1\)。那就可以从 \(f[i-1][i-j+1]\) 转移过来。

然后你就得到了转移方程。

当然,两个 \(3500\) 的数组会炸空间,那我们观察到 \(i\) 这一维只会涉及前面的那一个,那就可以用滚动数组解决空间问题。

代码

#include<cstdio>

using namespace std;

int n, p, f[3][4201], ans;

int main() {
scanf("%d %d", &n, &p); f[2 & 1][2] = 1;//一开始最后为高的只有这一种,初始化
for (int i = 3; i <= n; i++)
for (int j = 1; j <= i; j++) {
f[i & 1][j] = (f[i & 1][j - 1] + f[(i - 1) & 1][i - j + 1]) % p;//dp
} for (int i = 1; i <= n; i++)
ans = (ans + f[n & 1][i]) % p;//最后可能以不同的数字结束 printf("%d", (ans * 2) % p); return 0;
}

【ybt金牌导航1-2-6】【luogu P2467】地精部落的更多相关文章

  1. 【ybt金牌导航1-2-5】【luogu P3287】优美玉米 / 方伯伯的玉米田

    优美玉米 / 方伯伯的玉米田 题目链接:ybt金牌导航1-2-5 / luogu P3287 题目大意 有一个数组,你可以每次给一个区间里面的值加一,要你使得最后剩下的最长单调不下降子序列最长. 思路 ...

  2. 【ybt金牌导航1-2-4】免费馅饼

    免费馅饼 题目链接:ybt金牌导航1-2-4 题目大意 有一个直线,在某一个时刻有一个馅饼会出现在一些位置,有它的价值. 一个人一开始可以站在直线的任意地方,然后他每个时刻可以不移动,或向任意一边移动 ...

  3. 【ybt金牌导航1-2-3】折线统计

    折线统计 题目链接:ybt金牌导航1-2-3 题目大意 在一个图上有一些点,保证任意两个点的横纵坐标都不相同. 要你选一些集合,按 x 坐标排序依次连接,会构成一些连续上升下降的折线,问你折线数量是 ...

  4. 洛谷 P2467 地精部落 解题报告

    P2467 [SDOI2010]地精部落 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为\(N\)的山脉\(H\)可分为从左到右的\(N ...

  5. 【题解】金牌导航-高斯消元/Luogu P3232 游走

    题目描述: 详细分析: 我们对于编号的分配,很明显可以发现如下的分配就是期望最小的:对经过的期望次数越大的边赋予更小的编号. 那么问题就转化为了怎么求一条边的经过的期望次数,我们发现边数非常大所以肯定 ...

  6. 洛谷 P2467 地精部落 题解

    题面 好难啊好难啊好难啊~(以后再玩魔兽的时候绝对绝对虐死他) 做完后总结了一下思路; 首先推一下以下三条性质: 1.若两个 i 与 i+1 不相邻,那么我们直接交换这两个数字就可以组成一个新的数列 ...

  7. 【ybt高效进阶2-4-3】【luogu P4551】最长异或路径

    最长异或路径 题目链接:ybt高效进阶2-4-3 / luogu P4551 题目大意 给定一棵 n 个点的带权树,结点下标从 1 开始到 N.寻找树中找两个结点,求最长的异或路径. 异或路径指的是指 ...

  8. luogu P2467 [SDOI2010]地精部落

    很有意思的dp计数题目. 思考一下发现开始时山峰和开始是山谷的方案数是相同的 所以我们只需要统计一个即可. 证明的话可以考虑对于任意一种开始时山峰的方案 每个数字变成n-a[i]+1 那么可以此方案还 ...

  9. Luogu P2467 [SDOI2010]地精部落 | 神奇的dp

    题目链接 DP 题目大意:给定一个数n,求1~n这n个整数的所有排列中有多少个波动数列,将这个数量%p后输出. 什么是波动数列呢?顾名思义,就是一个大.一个小.一个大.一个小--或者是一个小.一个大. ...

随机推荐

  1. 【Oracle】Script to Collect DRM Information (drmdiag.sql) (文档 ID 1492990.1)

    脚本对应如下: The following (drmdiag.sql) is a script to collect information related to DRM (Dyanamic Reso ...

  2. 【JAVA并发第三篇】线程间通信

    线程间的通信 JVM在运行时会将自己管理的内存区域,划分为不同的数据区,称为运行时数据区.每个线程都有自己私有的内存空间,如下图示: Java线程按照自己虚拟机栈中的方法代码一步一步的执行下去,在这一 ...

  3. DOCKER 安装步骤-最靠谱的笔记

    一.系统环境规划 服务器名 项目名称 docker 操作系统 CentOS Linux release 7.1.1503 (Core) Docker 版本 17.03.2-ce   二.Docker ...

  4. 容器编排系统K8s之包管理器helm基础使用(二)

    前文我们介绍了helm的相关术语和使用helm安装和卸载应用,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14305902.html:今天我们来介绍下自定义 ...

  5. 华为交换机telnet登录时老是提醒是否更改初始密码- Warning: The initial password poses security risks

    问题:华为交换机在Telnet登录的时候总是提示初始密码不安全需要修改密码的处理方法 Warning: The initial password poses security risks   如果你输 ...

  6. fiddler安装以及使用说明

    一.fiddler fiddler是一个抓包工具,通过使用它抓包我们可以很清晰的看到抓的内容的协议,URL,参数等. 1.安装 在普通下载网站找到安装包,直接安装,点击下一步即可. 二.使用 1.se ...

  7. CobalStrike 4.0 生成后门几种方式 及 主机上线后基础操作

    出品|MS08067实验室(www.ms08067.com) 本文作者:BlackCat(Ms08067内网安全小组成员) CobalStrike 4.0 生成后门几种方式 步骤:Attacks-〉P ...

  8. Python PyCharm安装第三方库

    第一步:在PyCharm菜单中选择File--->Settings 第二步:在设置页出现的搜索框搜索:Project Interpreter 或者直接定位到此处 第三步:输入库名,搜索安装第三方 ...

  9. memset 在c++中使用细节注意

    C语言,在利用struct进行数据封装时,经常会使用memset(this,0,sizeof(*this))来初始化.而C++中,有时候也会用到struct,在利用memset进行初始化时,非常容易踩 ...

  10. HTMl5 特点 标签语法 以及标签

    知识点关于HTML5 的特点以及其标签和标签语法.. <!-- [HTMl5 特点] 向下兼容 用户至上 化繁为简 无插件范围 访问通用性 引入语义 引入原生媒体支持--> <!-- ...