1925: [Sdoi2010]地精部落

Time Limit: 10 Sec   Memory Limit: 64 MB
Submit: 797   Solved: 487
[ Submit][ Status][ Discuss]

Description

传说很久以前,大地上居住着一种神秘的生物:地精。 地精喜欢住在连绵不绝的山脉中。具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N 之间的正 整数。 如果一段山脉比所有与它相邻的山脉都高,则这段山脉是一个山峰。位于边 缘的山脉只有一段相邻的山脉,其他都有两段(即左边和右边)。 类似地,如果一段山脉比所有它相邻的山脉都低,则这段山脉是一个山谷。 地精们有一个共同的爱好——饮酒,酒馆可以设立在山谷之中。地精的酒馆 不论白天黑夜总是人声鼎沸,地精美酒的香味可以飘到方圆数里的地方。 地精还是一种非常警觉的生物,他们在每座山峰上都可以设立瞭望台,并轮 流担当瞭望工作,以确保在第一时间得知外敌的入侵。 地精们希望这N 段山脉每段都可以修建瞭望台或酒馆的其中之一,只有满足 这个条件的整座山脉才可能有地精居住。 现在你希望知道,长度为N 的可能有地精居住的山脉有多少种。两座山脉A 和B不同当且仅当存在一个 i,使得 Ai≠Bi。由于这个数目可能很大,你只对它 除以P的余数感兴趣。

Input

仅含一行,两个正整数 N, P。

Output

仅含一行,一个非负整数,表示你所求的答案对P取余 之后的结果。

Sample Input

4 7

Sample Output

3

HINT

 
对于 20%的数据,满足 N≤10; 
对于 40%的数据,满足 N≤18; 
对于 70%的数据,满足 N≤550; 
对于 100%的数据,满足 3≤N≤4200,P≤109

Source

第一轮Day2

题解:

将题目简化为1-n的所有排列中满足高低交替出现的个数,可以用动态规划实现。

我们用f[n][k]表示n个数,最后一个为k且最后两个递增,g[n][k]表示n个数最后一个数为k且最后两个递减。对于f[n][k],若我们将数列中每个数x换为n+1-x,则就成了g[n][n+1-k]。

所以可得f[n][k]=g[n][n+1-k]。

那么可得:

所以动态转移方程为f[n][k]=f[n][k-1]+f[n-1][n-k+1]

由于对称性,最终的答案为2ans。

但是题目范围n<=4200,所以想到用滚动数组来压缩空间,于是这道题就AC了。

程序代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#define MAXN 4300
using namespace std;
int main()
{int f[2][MAXN],n,p,i,j,ans=0,x=0,y=1;cin>>n>>p;if (n==1){cout<<1<<endl;return 0;}memset(f,0,sizeof(f));f[0][1]=1;for (i=2; i<=n; i++){for (j=1; j<=i; j++) f[y][j]=(f[y][j-1]+f[x][i-j+1])%p;swap(x,y);}for (i=1; i<=n; i++) ans=(ans+f[x][i])%p;ans=(ans*2)%p;cout<<ans<<endl;
}
//Written by aap

bzoj1925【sdoi2010】地精部落相关推荐

  1. BZOJ1925: [Sdoi2010]地精部落

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

  2. bzoj1925: [Sdoi2010]地精部落 [dp]

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

  3. BZOJ1925 [Sdoi2010]地精部落 【dp】

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

  4. bzoj1925 [Sdoi2010] 地精部落

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

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

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

  6. [bzoj1925][Sdoi2010]地精部落

    大佬们好神啊,考试都切掉了这题,,本来以为T3可做写完发现不对结果T2还崩了.qwq好闹心啊... 找到了一个不玄乎的题解至少转移我看懂了..clj的都太神了我等蒟蒻不能理解qwq 转自 http:/ ...

  7. P2467 [SDOI2010]地精部落

    P2467 [SDOI2010]地精部落 题意: 有n个山脉高度分别是1到n,现在让你按照山峰山谷的顺序依次摆放(第一个可以是山峰也可以是山谷),问有多少方案(答案mod p) 题解: dp,但是自己 ...

  8. DP [Sdoi2010]地精部落

    问题 H: [Sdoi2010]地精部落 时间限制: 1 Sec 内存限制: 64 MB 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 ...

  9. 1925: [Sdoi2010]地精部落

    1925: [Sdoi2010]地精部落 Time Limit: 10 Sec   Memory Limit: 64 MB Submit: 1196   Solved: 730 [ Submit][ ...

  10. [luogu2467 SDOI2010] 地精部落

    [luogu2467 SDOI2010] 地精部落 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有 ...

最新文章

  1. pandas.DataFrame删除/选取含有特定数值的行或列实例
  2. C++内存对象大会战
  3. 病毒导致分区双击无法打开的解决方法
  4. mysql io depth_MySQL读写IO的操作过程解析
  5. Java虚拟机学习(2):垃圾收集算法
  6. linux下定义删除变量
  7. python 如何将代码打包成exe可执行程序?(导出为exe可执行文件)pyinstaller
  8. python自带的shell、其性能优于ipython吗_Python自带的shell,其性能优于IPython
  9. 【 Grey Hack 】万金油脚本:在路由器上获取shell
  10. redis 集群环境部署
  11. Linux解压tar.gz、zip、tar.bz2 文件与对应的命令
  12. android手机debian 编译nodejs
  13. 如何从CPU顶盖获取有用信息
  14. 超简单全面的html图片自动轮播
  15. VS中的debug和releasse版本的区别
  16. CF1108D Diverse Garland
  17. latex超级基础的文档手册——第二部分:符号、图片、表格
  18. 关于常用(?)字符串处理函数的合集
  19. android和苹果内存,安卓的8G运行内存为什么与苹果3G的运行内存不能抗衡?
  20. 人工智能和区块链是什么关系?

热门文章

  1. Oracle存储过程语法学习
  2. python xy打不开、没有关联程序_绿茶XP系统下exe文件打不开提示没有关联程序如何解决...
  3. 右键计算机管理显示找不到文件,win10右键管理找不到文件怎么办 右键管理找不到文件解决方法...
  4. HTML5+CSS3 鼠标悬停3D立体图片效果
  5. 宝塔控制面板安装禅道开源版教程
  6. 为Linux部署红旗紫光输入法
  7. Android4.2.2下Stagefright多媒体架构中的A31的OMX插件和Codec组件
  8. k8s admission webhook初探
  9. 电化学微量元素分析仪的执行标准
  10. 周边美食api 周边美食餐厅检索