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. SQL Server实战二:创建、修改、复制、删除数据库表并加以数据处理

      本文介绍基于Microsoft SQL Server软件,实现数据库表的创建.修改.复制.删除与表数据处理的方法. 目录 1 交互式创建数据库表T 2 交互式创建数据库表S 3 T-SQL创建数据 ...

  2. java引入jep实现四则运算包含负数且规范两位小数

    1.在pom中引入依赖 <!--四则运算--> <dependency> <groupId>jep</groupId> <artifactId&g ...

  3. Solution - AGC060C

    Link 简要题意:称一个长为 \(2^n-1\) 的排列 \(P\) 像堆,如果 \(P_i \lt P_{2i}\),且 \(P_i \lt P_{2i+1}\).给定 \(a,b\),设 \(u ...

  4. 大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题

    大数据面试SQL每日一题系列:最高峰同时在线主播人数.字节,快手等大厂高频面试题 之后会不定期更新每日一题sql系列. SQL面试题每日一题系列内容均来自于网络以及实际使用情况收集,如有雷同,纯属巧合 ...

  5. Jetbrains系列产品最新激活方法[持续更新]

    Jetbrains系列产品最新激活方法[持续更新] 2021.3.4系列激活 方法一: 2021.3.4参考文章: https://www.exception.site/essay/how-to-fr ...

  6. java调用webservice接口

    1.直接AXIS调用远程的webservice 注意:不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法. import org.apache.axis.c ...

  7. 4G EPS 中建立 UE 与 eNB 之间的 RRC 连接

    目录 文章目录 目录 前文列表 RRC 连接 Radio Bearer SRB UE 与 eNB 建立 RRC 连接的流程 前文列表 <4G EPS 中的小区搜索> <4G EPS ...

  8. 虚拟机上k8s部署好的第二天用时总是出现的各种问题

    open /run/flannel/subnet.env: no such file or directory open /run/flannel/subnet.env: no such file o ...

  9. XML Schema 复杂元素类型详解:定义及示例解析

    在XML Schema(XSD)中,复杂元素是指包含其他元素和/或属性的XML元素.复杂元素可以分为四种类型: 空元素: 仅包含其他元素和/或属性的元素. 仅包含其他元素的元素: 不包含文本内容,只包 ...

  10. 【PB案例学习笔记】-02 目录浏览器

    写在前面 这是PB案例学习笔记系列文章的第二篇,该系列文章适合具有一定PB基础的读者, 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求. 文章中设计到的源码 ...