Solution

这题真秒啊,我眼瞎没有看到这是个排列

很显然, 有一条性质:

  第一个是山峰 和 第一个是山谷的情况是一一对应的, 只需要把每个数 $x$  变成 $n-x+1$

然后窝萌定义数组 $f[ i ][ j ]$ 表示有 $i$ 座山, 且第一座山是山谷(即开头上升) 且 高度 $<= j$ 时的方案数。

然后考虑如何转移。

1: 当第一位 $!=j$ 时, 即第一位 $ <= j - 1$, 则可从$f[ i ][j-1]$转移得到

2: 当第一位 $=j$ 时, 窝萌假装第一位不存在, 然后把后面序列 $> j$的数都 -1,

 就得到了一个有$i - 1$座山, 第一座山是山峰且高度 $>=j$ (本来是 $>j$,因为 $-1$, 所以 $>=j$ ) 的方案

 然后引用性质,就是第一座山为山谷 且 高度 $<=(i - 1) -j+1$ 的方案, 即 $f[i -1][i - j]$

所以最后的转移方程为: $f[i][j] = f[i][j-1] + f[i-1][i-j]$

Code

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,a,b) for(register int i = (a); i <= (b); ++i)
#define per(i,a,b) for(register int i = (a); i >= (b); --i)
using namespace std; const int N = ; int n, mod;
int f[][N], op; int main()
{
scanf("%d%d", &n, &mod);
f[][] = ;
rep(i, , n) rep(j, , i)
f[i % ][j] = (f[i % ][j - ] + f[(i - ) % ][i - j]) % mod;
f[n % ][n] = f[n % ][n] * % mod;
printf("%d\n", (f[n % ][n] % mod + mod) % mod);
}

Luogu 2467[SDOI2010]地精部落 - DP的更多相关文章

  1. Luogu 2467 [SDOI2010]地精部落

    挺有意思的题. 优质题解: https://www.luogu.org/blog/user55639/solution-p2467 题意为求长度为n,取值为$[1, n]$的波动序列的个数. 首先需要 ...

  2. BZOJ 1925: [Sdoi2010]地精部落( dp )

    dp(i,j)表示1~i的排列中, 以1~j为开头且开头是下降的合法方案数 这种数列具有对称性, 即对于一个满足题意且开头是上升的n的排列{an}, 令bn = n-an+1, 那么{bn}就是一个满 ...

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

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

  4. [BZOJ1925][SDOI2010]地精部落(DP)

    题意 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...

  5. Luogu2467 SDOI2010 地精部落 DP

    传送门 一个与相对大小关系相关的$DP$ 设$f_{i,j,0/1}$表示放了$i$个,其中最后一个数字在$i$个中是第$j$大,且最后一个是极大值($1$)或极小值时($0$)的方案数.转移: $$ ...

  6. P2467 [SDOI2010]地精部落 DP

    传送门:https://www.luogu.org/problemnew/show/P2467 参考与学习:https://www.luogu.org/blog/user55639/solution- ...

  7. luogu P2467 [SDOI2010]地精部落

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

  8. 【BZOJ】1925: [Sdoi2010]地精部落 DP+滚动数组

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1925 题意:输入一个数N(1 <= N <= 4200),问将这些数排列成折线 ...

  9. [SDOI2010]地精部落 DP

    LG传送门 DP好题 题意很简单,就是求1-n的排列,满足一个数两边的数要么都比它大要么都比它小,求这样的排列个数对\(p\)取膜的值(为了表述简单,我们称这样的排列为波动序列). 这个题我第一眼看到 ...

随机推荐

  1. export default 与 export

    export default 只能导出一个 可以用任意的变量来接收 export 可以暴露多个成员,需要用 import {} 接受成员 需要用名字接受 名字必须跟导出名字一致  //或者as作为别名 ...

  2. linux下网络配置

    配置相关 http://bbs.acehat.com/thread-813-1-1.html

  3. Html----表单元素

    表单元素:用于客户端和服务端进行信息交互的通道 <form></form>:所有的表单元素都应该放在里面 文本输入框: <input type="text&qu ...

  4. php设置头部让任何域名请求

    header("Access-Control-Allow-Origin: *"); // 允许任意域名发起的跨域请求...

  5. Ubuntu系统下手动释放内存

    有时候,像mongo这种,对内存只吃不吐的,我们要手动释放一下. drop_caches的详细文档如下:Writing to this will cause the kernel to drop cl ...

  6. centos7防火墙以设置以及关闭selinux

    一.CentOS 7.X 关闭SELinux 1.查看 getenforce permissive 或者 enforcing模式 2.临时设置 setenforce 1 成为permissive模式 ...

  7. PLM修改数据库密码

    在WINDCHILL SHELL中执行以下命令: xconfmanager -s wt.pom.dbPassword=数据库密码 -t db/db.properties -p 重启服务

  8. JVisual 相关help参数

    The launcher has determined that the parent process has a console and will reuse it for its own cons ...

  9. Django项目的创建与管理和pycharm与Github的秘密

    随笔 - 174  文章 - 21  评论 - 19 Django项目创建与管理   1.主题 这部分教程主要介绍如何通过Pycharm创建.管理.运行一个Django工程.对于Django模块的相关 ...

  10. 牛客网练习赛43-C(图论)

    题目链接:https://ac.nowcoder.com/acm/contest/548/C 题意:有n个知识点,学会每个知识点花T[i],已经学会了其中k个知识点,有m组关系,t1,t2,t3,表示 ...