很有意思的dp计数题目。

思考一下发现开始时山峰和开始是山谷的方案数是相同的 所以我们只需要统计一个即可。

证明的话可以考虑对于任意一种开始时山峰的方案 每个数字变成n-a[i]+1 那么可以此方案还是一个排列 且变成开始时山谷的方案。

考虑统计一个 设f[i][j]表示到了第i个数字 此时放数集合为j的方案数。

n*2^n的复杂度当然过不了。之所以有这么高的复杂度 是因为数的集合一直放不下去。

只要我们考虑出和数的大小无关的状态就能降低复杂度。

强行考虑 f[i]表示i个数字所形成的第一个为山峰的方案数。

发现很难推到i+1因为我们的数的集合不知道 此时两种方法打表找规律(非常困难。

考虑递推关系是可行的 这个时候一个比较强大的转移是 我们发现i个数中存在最大值 我们以最大值为标准确定方案数。

最大值位置如果在i 那么我们要选出C(n-1,i-1)个数在左边 剩下的在右边 那么方案数就是 f[i-1]C(n-1,i-1)f[n-i];

这样我们枚举一个i就能推出方案数 原因是最大值在做分割的缘故。非常巧妙的dp。将数的集合强行放下。

关于组合数不能够预处理 但是可以发现我们逐次递推的时候推出组合数 滚动数组即可。

luogu上可以开二维数组 但bzoj上不行。。

const int MAXN=4210;
int n,mod;
ll f[MAXN],c[2][MAXN];
int main()
{
freopen("1.in","r",stdin);
f[0]=f[1]=1;
get(n);get(mod);
int u=0;
c[u][0]=1;
rep(2,n,i)
{
u=u^1;c[u][0]=1;
rep(1,i-1,j)c[u][j]=(c[u^1][j-1]+c[u^1][j])%mod;
for(int j=1;j<=i;j+=2)f[i]=(f[i]+f[j-1]*c[u][j-1]%mod*f[i-j])%mod;
}
printf("%lld\n",(f[n]<<1)%mod);
return 0;
}

再分享一个思路吧:

这是基于分析性质的来的:一个性质 如果j-1为开头 j-1和j不相邻 那么交换两个数字此时还是合法的序列。

所以设 f[i][j]表示前i个数字选择j为开头的方案数 有一个显然的转移 f[i][j]=f[i][j-1] 当然还要考虑一下j和j-1相邻的时候。

此时必须要把j-1紧贴j放 让剩下的i-1个数形成一个一个波动序列 但是j-1是山谷。

我们只求出了j-1是山峰的方案数 考虑j-1是山谷时的所有方案数 和i-1-(j-1)+1时山峰的方案数相同 所以此时有转移f[i][j]+=f[i-1][i-j+1];

发现便利了所有的情况 所以这种方法时正确的。 这个思路是基于仔细观察性质的得到了。

所以说性质也分好坏 一个好的性质可以帮助解题。

const int MAXN=4210;
int n,mod;
int ans,f[2][MAXN],u;
int main()
{
freopen("1.in","r",stdin);
n=read();mod=read();
if(n==1||n==2)
{
printf("%d\n",n);
return 0;
}
f[u][2]=1;
for(int i=3;i<=n;++i)
{
u=u^1;
for(int j=2;j<=i;++j)
f[u][j]=(f[u][j-1]+f[u^1][i-j+1])%mod;
}
for(int i=2;i<=n;++i)ans=(ans+f[u][i])%mod;
printf("%d\n",(ans<<1)%mod);
return 0;
}

luogu P2467 [SDOI2010]地精部落的更多相关文章

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

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

  2. 【ybt金牌导航1-2-6】【luogu P2467】地精部落

    地精部落 题目链接:ybt金牌导航1-2-6 / luogu P2467 题目大意 有一个排列,要使得每个位置要么都比两边高,要么比两边低. 而且一定要以一高一低的方式排列. 两边的只用比旁边的那个高 ...

  3. P2467 [SDOI2010]地精部落 DP

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

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

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

  5. P2467 [SDOI2010]地精部落

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

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

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

  7. Luogu 2467 [SDOI2010]地精部落

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

  8. Luogu 2467[SDOI2010]地精部落 - DP

    Solution 这题真秒啊,我眼瞎没有看到这是个排列 很显然, 有一条性质: 第一个是山峰 和 第一个是山谷的情况是一一对应的, 只需要把每个数 $x$  变成 $n-x+1$ 然后窝萌定义数组 $ ...

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

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

随机推荐

  1. POJ2362贪心

    题意:我们的化学生物学家发明了一种新的叫stripies非常神奇的生命.如果一个质量为m1和m2的stripies相撞,生成的stripies体重是2*sqrt(m1*m2) 现在,科学家们想知道,如 ...

  2. 古有七步成诗,今有六步完成DevOps上华为云DevCloud实践

    引言: 在“DevOps能力之屋(Capabilities House of DevOps)”中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力.华为云DevClo ...

  3. sql语句-如何在SQL以一个表中的数据为条件据查询另一个表中的数据

    select *from 表2where 姓名 in (select 姓名from 表1where 条件) 这个就是用一个表的查询结果当作条件去查询另一个表的数据

  4. 005.Nginx配置下载站点

    一 下载站点 1.1 下载站点配置 语法:autoindex on | off; 默认值:autoindex off; 配置段:http,server,location Nginx默认不允许列出整个目 ...

  5. day10 基本数据类型(下)

    目录 一.集合 1.作用 2.定义 3.类型转换 4.内置方法 4.1交集:两者共有的 4.2合集:两者融合去重 4.3差集:某个集合单独有的 4.4对称差集:两个集合各自单独有的组成的集合 4.5父 ...

  6. SQL注入原理及代码分析(二)

    前言 上一篇文章中,对union注入.报错注入.布尔盲注等进行了分析,接下来这篇文章,会对堆叠注入.宽字节注入.cookie注入等进行分析.第一篇文章地址:SQL注入原理及代码分析(一) 如果想要了解 ...

  7. java 基本语法(三) 运算符

    1-算术运算符 1.算术运算符: + - + - * / % (前)++ (后)++ (前)-- (后)-- + [典型代码] //除号:/ int num1 = 12; int num2 = 5; ...

  8. Flutter 快捷开发 Mac Android Studio 篇

    老孟导读:此快捷方式适用于Mac下的 Android Studio .Windows 下的快捷方式请参考这篇文章:https://juejin.im/post/5efe71365188252e7d7f ...

  9. 3个月不发工资,拖延转正?2天跳槽软件测试成功,9.5k他不香吗!

    今天聊到的小哥哥很悲催又很神奇,身处武汉的他,正好赶上了疫情,不仅长达3个月没有发工资,拖延转正,还要降薪,三重打击,实名悲催. 不破不立,试用期80%再打8折,怎么跳槽工资都得比这高,果然,仅仅两天 ...

  10. Harbor打怪升级

    目录 一.目标 二.V1.4升级至V1.6 三.V1.6升级至V1.9 四.V1.9升级至V2.0 五.写在最后 一.目标 Harbor V1.4版本升级至V2.0 注: Harbor升级需要注意的是 ...