DP

显然我固定第一个是峰,然后再乘以2就是答案,因为一个合法的反转之后也是合法的而且谷峰颠倒了

发现如果设\(dp[i][j]\)表示前\(i\)个山脉,第\(i\)个山脉是高度\(j\)的答案,然后填第\(i\)个的时候不知道会不会重复,所以这个状态挂了,重新找个状态设设。

所以我们改变考虑对象,不考虑整个数列,只考虑已经填了的,我把已经填了的数的数列叫做\(S\),当我考虑到第\(i\)位的时候,这个\(dp[i][j]\)的\(j\)表示它在里面的相对位置,也就是排名。

现在就好搞多了,仍然我固定原数列下标奇数是峰,下标偶数是谷,下面给出DP过程。

对于偶数,\(dp[i][j]\)由\(\sum\limits_{k=j}^{i-1}{dp[i-1][k]}\),因为我新的\(j\)加进来后,所有大于它的都要排名+1,所以原来我在第\(j\)个的,实际上是比它要大的

对于奇数,\(dp[i][j]\)由\(\sum\limits_{k=1}^{j-1}{dp[i-1][k]}\)这个显然,就是相对排名比\(j\)小,不说了

然后答案是对所有的\(dp[n][i]\)求和,没了,代码:


显然我固定第一个是峰,然后再乘以2就是答案,因为一个合法的反转之后也是合法的而且谷峰颠倒了

所以我们改变考虑对象,不考虑整个数列,只考虑已经填了的,我把已经填了的数的数列叫做\(S\),当我考虑到第\(i\)位的时候,这个的\(j\)表示它在里面的相对位置,也就是排名。

现在就好搞多了,仍然我固定原数列下标奇数是峰,下标偶数是谷,下面给出DP过程。

对于偶数,\(dp[i][j]\)由\(我新的\)j\(加进来后,所有大于它的都要排名+1,所以原来我在第\)j$个的,实际上是比它要大的

对于奇数,\(dp[i][j]\)由\(\sum\limits_{k=1}^{j-1}{dp[i-1][k]}\)这个显然,就是相对排名比\(j\)小,不说了

然后答案是对所有的\(dp[n][i]\)求和,没了,代码:

显然我固定第一个是峰,然后再乘以2就是答案,因为一个合法的反转之后也是合法的而且谷峰颠倒了

发现如果设\(dp[i][j]\)表示前\(i\)个山脉,第\(i\)个山脉是高度\(j\)的答案,然后填第\(i\)个的时候不知道会不会重复,所以这个状态挂了,重新找个状态设设。

所以我们改变考虑对象,不考虑整个数列,只考虑已经填了的,我把已经填了的数的数列叫做\(S\),当我考虑到第\(i\)位的时候,这个\(dp[i][j]\)的\(j\)表示它在里面的相对位置,也就是排名。

现在就好搞多了,仍然我固定原数列下标奇数是峰,下标偶数是谷,下面给出DP过程。

对于偶数,\(dp[i][j]\)由\(\sum\limits_{k=j}^{i-1}{dp[i-5][k]}\),因为我新的\(j\)加进来后,所有大于它的都要排名+1,所以原来我在第\(j\)个的,实际上是比它要大的

对于奇数,\(dp[i][j]\)由\(\sum\limits_{k=1}^{j-1}{dp[i-9][k]}\)这个显然,就是相对排名比\(j\)小,不说了

然后答案是对所有的\(dp[n][i]\)求和,没了,代码:

显然我固定第一个是峰,然后再乘以2就是答案,因为一个合法的反转之后也是合法的而且谷峰颠倒了

发现如果设\(dp[i][j]\)表示前\(i\)个山脉,第\(i\)个山脉是高度\(j\)的答案,然后填第\(i\)个的时候不知道会不会重复,所以这个状态挂了,重新找个状态设设。

标偶数是谷,下面给出DP过程。

对于偶数,\(dp[i][j]\)由\(\sum\limits_{k=j}^{i-1}{dp[i-11][k]}\),因为我新的\(j\)加进来后,所有大于它的都要排名+1,所以原来我在第\(j\)个的,实际上是比它要大的

对于奇数,\(dp[i][j]\)由\(\sum\limits_{k=1}^{j-1}{dp[i122][k]}\)这个显然,就是相对排名比\(j\)小,不说了

然后答案是对所有的\(dp[n][i]\)求和,没了,代码:

显然我固定第一个是峰,然后再乘以2就是答案,因为一个合法的反转之后也是合法的而且谷峰颠倒了

发现如果设\(dp[i][j]\)表示前\(i\)个山脉,第\(i\)个山脉是高度是谷,下面给出DP过程。

对于偶数,\(dp[i][j]\)由\(\sum\limits_{k=j}^{i-1}{dp[i-1][k]}\),因为我新的\(j\)加进来后,所有大于它的都要排名+1,所以原来我在第\(j\)个的,实际上是比它要大的

对于奇数,\(dp[i][j]\)由\(\sum\limits_{k=1}^{j-1}{dp[i-1][k]}\)这个显然,就是相对排名比\(j\)小,不说了

然后答案是对所有的\(dp[n][i]\)求和,没了,代码:

#include<bits/stdc++.h>
#define vd void
int gi(){
char c;int x=0,f=0;
while(!isdigit(c=getchar()))f|=(c=='-');
while(isdigit(c))x=(x*10)+(c^48),c=getchar();
return f?-x:x;
}
int n,mod;
template<class Ta,class Tb>vd inc(Ta&a,Tb b){a=a+b>=mod?a+b-mod:a+b;}
template<class Ta,class Tb>int sub(Ta&a,Tb b){return a>=b?a-b:a+mod-b;}
int dp[4201][4201],s[4201];
int main(){
n=gi(),mod=gi();
for(int i=1;i<=n;i++)dp[1][i]=1,s[i]=s[i-1]+1;
for(int i=2;i<=n;i++){
for(int j=1;j<=i;j++){
if(i&1)dp[i][j]=s[j-1]%mod;
else dp[i][j]=sub(s[i-1],s[j-1]);
}
for(int j=1;j<=i;j++)s[j]=(s[j-1]+dp[i][j])%mod;
}
printf("%lld\n",s[n]*2%mod);
return 0;
}

还有一份

#include<bits/stdc++.h>
#define vd void
int gi(){
char c;int x=0,f=0;
while(!isdigit(c=getchar()))f|=(c=='-');
while(isdigit(c))x=(x*10)+(c^48),c=getchar();
return f?-x:x;
}
int n,mod;
template<class Ta,class Tb>vd inc(Ta&a,Tb b){a=a+b>=mod?a+b-mod:a+b;}
template<class Ta,class Tb>int sub(Ta&a,Tb b){return a>=b?a-b:a+mod-b;}
int dp[4201][4201],s[4201];
int main(){
n=gi(),mod=gi();
for(int i=1;i<=n;i++)dp[1][i]=1,s[i]=s[i-1]+1;
for(int i=2;i<=n;i++){
for(int j=1;j<=i;j++){
if(i&1)dp[i][j]=s[j-1]%mod;
else dp[i][j]=sub(s[i-1],s[j-1]);
}
for(int j=1;j<=i;j++)s[j]=(s[j-1]+dp[i][j])%mod;
}
printf("%lld\n",s[n]*2%mod);
return 0;
}

P2467 [SDOI2010] 地精部落 学习笔记的更多相关文章

  1. P2467 [SDOI2010]地精部落 DP

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

  2. P2467 [SDOI2010]地精部落 (dp+组合数)【扩展Lucas好难不会】

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

  3. P2467 [SDOI2010]地精部落

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

  4. 洛咕 P2467 [SDOI2010]地精部落

    同波浪,简单dp. 高度从1到n插入山脉,设f[i][j][k]表示插入了i个山脉,组成了j段,边界上有k个山脉的方案数. 那么新插入的山脉只会:插入在边界上且自己是一段.插入在边界上且与最左边的段相 ...

  5. 洛谷 P2467 [SDOI2010]地精部落

    洛谷 我讲的应该没有这个[https://www.luogu.org/blog/user55639/solution-p2467]清楚. 贴个代码算了: #include <bits/stdc+ ...

  6. luogu P2467 [SDOI2010]地精部落

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

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

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

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

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

  9. BZOJ_1925_[Sdoi2010]地精部落_递推

    BZOJ_1925_[Sdoi2010]地精部落_递推 Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 ...

  10. 【BZOJ1925】[SDOI2010]地精部落(动态规划)

    [BZOJ1925][SDOI2010]地精部落(动态规划) 题面 BZOJ 洛谷 题解 一道性质\(dp\)题.(所以当然是照搬学长PPT了啊 先来罗列性质,我们称题目所求的序列为抖动序列: 一个抖 ...

随机推荐

  1. ESP32 I2C 总线主模式通信程序

    一.概述 这里主要是记录 ESP32 中进行 I2C 通行的基本程序,也可以说是 I2C 总线驱动程序,当然这里只是作为主模式,从模式我还没需要这个需求,以后有机会贴上.此笔记的主要目的是防止以后写 ...

  2. 电路笔记03—kcl、kvl,独立源,受控源

    电路笔记03-kcl.kvl,独立源,受控源 听起来简单,做起来需要思考.所以做作业,思考很有 必要.电路的功率守恒,4种受控源,用两类约束列方程.电路分析力最难的一部分,怎么把一个量用其它量表示,后 ...

  3. Oracle、达梦:同一数据库边查询边插入的两种方式

    1.方式1 插入的表需要构建好 -- 建表:6秒 500毫秒:抽数据100万:10秒 640毫秒.11秒 189毫秒 insert into T_HUGE_COMPRESS (ID, NAME) ( ...

  4. 什么是SQL 语句中相关子查询与非相关子查询

    1.什么是SQL子查询 要理解相关子查询和非相关子查询,我们得首先理解什么是子查询,子查询是指在一个查询语句中嵌套的另一个查询语句. 子查询可以嵌套在其他查询语句中,如 SELECT.INSERT.U ...

  5. ZJC比赛

    \(\large{Uptatete}\) 先放张图 这次是真的没想再改了,但是一到教室就又会怎么优化了 没必要每个点都让它和其他所有点判断一下,可以从上一个点加加减减啥的转过来 然后我就在昨天那个 \ ...

  6. 什么是NASM

    什么是NASM NASM是一个汇编器的名称,全称是Netwide Assembler,支持x86与x64架构的CPU(注意不支持ARM架构). 我们知道,在x86和x64架构上有多个操作系统,比较流行 ...

  7. csapp-attacklab(完美解决版)

    注意:必须阅读Writeup,否则根本看不懂这个lab要怎么做 实验前准备 1.在终端中输入./ctarget和./rtarget结果报错 百度后得知自学的同学需要在执行文件时加上-q参数,不发送结果 ...

  8. js图片懒加载,在不做分页的情况下的解决方案

    Intersection Observer API 1.注意点 一般都是后端返回数据, 用 this.$nextTick(() => { this.handleScroll(); }); 确保d ...

  9. IDEA+carbon.now.sh安装使用

    安装 打开IDEA,选择setting-->plugins 搜索carbon.now.sh,点击安装,重启IDEA即可. 使用 选择需要生成的代码,Ctrl+A全选.然后再代码中点击右键,找到o ...

  10. Istio(六):Istio弹性(超时&重试)和故障注入

    目录 一.模块概览 二.系统环境 三.弹性(超时&重试) 3.1 弹性 四.故障注入 4.1 故障注入 五.实战:观察错误注入 5.1 在 Grafana.Zipkin 和 Kiali 中观察 ...