地精部落

题目链接: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. 环境变量IFS

    环境变量IFS的值是由1个空格.1个制表符.1个换行符依序构成的字符串,也就是" \t\n"字符串. #查看IFS变量值的长度: test ~ # expr length &quo ...

  2. library cache pin解决方法

    library cache pin大部分都是因为编译存储过程造成的 查找造成问题的数据库对象(一般为存储过程) SELECT * FROM v$session_wait WHERE event = ' ...

  3. 容器编排系统K8s之包管理器Helm基础使用

    前文我们了解了k8s上的hpa资源的使用,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14293237.html:今天我们来聊一下k8s包管理器helm的相 ...

  4. windows下的:开始→运行→命令

    开始→运行→命令 集锦                          winver---------检查Windows版本wmimgmt.msc----打开windows管理体系结构(WMI)wu ...

  5. Mybatis Plus 3.4版本之后分页插件的变化

    一.MybatisPlusInterceptor 从Mybatis Plus 3.4.0版本开始,不再使用旧版本的PaginationInterceptor ,而是使用MybatisPlusInter ...

  6. three.js cannon.js物理引擎地形生成器和使用指针锁定控件

    今天郭先生说一说使用cannon.js物理引擎绘制地形和使用指针锁定控件.效果如下图.线案例请点击博客原文. 这里面的生成地形的插件和指针锁定控件也是cannon.js的作者schteppe封装的,当 ...

  7. IPC图像处理项目流程图

    网络摄像机IPC图像处理项目流程图:

  8. Let’s Encrypt/Certbot移除/remove/revoke不需要的域名证书

    1.首先确认你的证书不再需要,如果有必要,请执行下面的命令进行备份 cp /etc/letsencrypt/ /etc/letsencrypt.backup -r 2.撤销证书然后删除证书 [root ...

  9. 陈思淼:阿里6个月重写Lazada,再造“淘宝”的技术总结

    小结: 1. 所谓的中台技术,就是从 IDC,网络,机房,操作系统,中间件,数据库,算法平台,数据平台,计算平台,到业务平台,每一层都有清晰的定义和技术产品. 具体来看,首先,集团技术的分层和每层的产 ...

  10. Profile Guided Optimization Link Time Optimization

    https://github.com/python/cpython Profile Guided Optimization PGO takes advantage of recent versions ...