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

题解

我不由得再次吐槽这个巨长的题面
题意就是让你求一个n的排列且这个排列满足是抖动序列的个数%p的值
其实我一开始想的dp方程是f[i][j]表示1~i,末位为j且为山峰的方案数,但是我发现这个真的没法转移。。于是乎%一发题解啊啊啊啊
设f[i][j]为1~i,首位取值范围1~j且是山峰的方案数
先解释一个性质,f[i][i-j+1]即为是山谷的方案数。为啥?你把原数列所有值取个反(i-j+1),那么不就是一个山谷的方案数嘛
看方程
f[i][j]=f[i][j-1]+f[i-1][i-j]
前半部分很好理解啊。。首位取值1~j-1的范围已经算出来了那不就直接加上来嘛
关键后半部分,其实就是要求首位取值j,满足是山峰的个数
那其实就是要求一个取值范围j-1,数字个数i-1,且为山谷的方案数
那么我们上面证明的这个性质就出来了啊,f[i][i-j+1]即为是山谷的方案数
把i换成i-1,不就成了f[i-1][i-j]。。
记得滚动,输出的时候要*2因为只求了开头是山峰的个数

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int f[2][4205];//首位取值1~j 满足一定为山峰
int n,mod;
int main()
{scanf("%d%d",&n,&mod);if(n==1){printf("1\n");return 0;}f[1][1]=1;int st=1;for(int i=2;i<=n;i++){st^=1;for(int j=1;j<=i;j++)f[st][j]=(f[st][j-1]+f[st^1][i-j])%mod;}printf("%d\n",f[st][n]*2%mod);return 0;
}

[bzoj1925][DP]地精部落相关推荐

  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]地精部落(DP)

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

  5. bzoj1925 [Sdoi2010] 地精部落

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

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

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

  7. [BZOJ1925]地精部落

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

  8. bzoj1925【sdoi2010】地精部落

    1925: [Sdoi2010]地精部落 Time Limit: 10 Sec   Memory Limit: 64 MB Submit: 797   Solved: 487 [ Submit][ S ...

  9. DP [Sdoi2010]地精部落

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

最新文章

  1. 分享2020 几个好用的ip地址归属地查询
  2. OpenCV中检测ChArUco的角点(2)
  3. 基于机器学习梯度下降优化算法来寻找最佳的线性回归模型
  4. 用户相关的文件、解析以及命令的使用
  5. C#中的is和as操作符
  6. 正则表达式基础知识及应用(用于个人学习以及回顾)
  7. go gin框架:Any响应任何请求类型
  8. C++STL常用遍历算法
  9. openpyxl删除添加excel列_Python | 如何使用Python操作Excel(二)
  10. 开源评论:QQ真的会“开放”和“共享”吗?
  11. springboot 支付宝电脑支付
  12. 论文阅读(XiangBai——【CVPR2017】Detecting Oriented Text in Natural Images by Linking Segments)...
  13. 网站安全之密码明文传输漏洞
  14. 数据科学 IPython 笔记本 六、SciPy 统计推断
  15. 等式约束凸二次规划(拉格朗日乘子法)_python
  16. 需求分析解决方案文案,展示图文结合的文案的视觉感。运用屏幕摄影师Snaglt实现屏幕图像文本捕获与编辑,为技术文案的编写提供素材支持。
  17. 使用LibreOffice将office文档转pdf(java实现)
  18. 在java程序中实现发送邮件的功能
  19. 这是属于你我平凡人的荣耀
  20. oracle ORA-02292: 违反完整约束条件

热门文章

  1. 启明星辰2018年营收达25亿元 同比增长10.58%
  2. fc安卓模拟器_小霸王模拟器安卓版下载
  3. 量子物理史话 第一章 黄金时代
  4. Linux命令参考手册
  5. 国内十大Linux版本一览
  6. 为Linux安置红旗紫光输入法
  7. unity实战——穿越火线
  8. VMware 导出镜像文件到 Virtual Box 使用
  9. React-forceUpdate()
  10. 总结一下利用Jedis连接redis连接不上的解决办法