很有意思的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. Spark TempView和GlobalTempView的区别

    Spark TempView和GlobalTempView的区别 TempView和GlobalTempView在spark的Dataframe中经常使用,两者的区别和应用场景有什么不同. 我们以下面 ...

  2. 最简单的博弈论——HDU - 5963 朋友 (博弈)

    OK,好的先看一下题意: B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根. ...

  3. appium移动端自动化测试环境搭建windows-appium-android

    第一步:安装jdk 安装jdk(1.7版本以上) 安装完成设置jdk环境变量(百度查询) cmd命令下键入 java -version命令检查jdk是否安装成功且设置环境变量成功,如下图所示: 第二步 ...

  4. iOS刨根问底-深入理解GCD

    概述 做过iOS开发的同学相信对于GCD(Grand Central Dispatch)并不陌生,因为在平时多线程开发过程中GCD应该是使用最多的技术甚至它要比它的上层封装NSOperation还要常 ...

  5. shell专题(三):Shell脚本入门

    1.脚本格式 脚本以#!/bin/bash开头(指定解析器) 2.第一个Shell脚本:helloworld (1)需求:创建一个Shell脚本,输出helloworld (2)案例实操: [atgu ...

  6. java 面向对象(二十九):异常(二)异常的处理

    1.java异常处理的抓抛模型过程一:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象. * 并将此对象抛出. * 一旦抛出对象以后,其后的代 ...

  7. java 面向对象(二十五):内部类:类的第五个成员

    内部类:类的第五个成员 1.定义: Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类.2.内部类的分类:成员内部类(静态.非静态 ) vs 局部内部类(方法内.代码块内.构 ...

  8. 手把手整合SSM框架

    前言 如果看过前几篇文章,对 Spring 和 MyBatis 有了一定了解,一定想上手试试.这篇文章从 0 到 1,手把手整合 SSM (Spring.Spring MVC.MyBatis). 本篇 ...

  9. CSS背景处理

    CSS背景处理 背景样式 背景颜色 如果想让一个区域具有纯色的背景,可以使用background-color进行设置,背景颜色可以是rgb,rgba,#16网页色. <!DOCTYPE html ...

  10. Serverless的概念&定义-无服务计算详解

    过去几年间,Serverless 发展迅猛,与其相伴的还有从小程序.移动端等到前后端一体化的演进与实践,也正因如此,从云计算到前端,众多开发者都极为关注 Serverless到底是什么? 在国内,Se ...