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. switch...case结构
  2. Spring Boot 中的 RestTemplate不好用?试试 Retrofit !
  3. python exec
  4. 初识contiki(2.7版本)
  5. ubuntu修改pip的官方源为豆瓣源
  6. c语言RePutDate用法,住宿结帐管理系统--C语言课程设计.doc
  7. Android NDK开发Crash错误定位
  8. numpy 辨异(一) —— reshape 与 resize
  9. 深入理解JVM一JVM内存模型
  10. HDU2516 取石子游戏
  11. JS获取URL传过来的参数
  12. rs485接口上下拉_RS485上拉下拉电阻计算详解
  13. Redhat8 配置使用阿里源(关闭官方订阅)
  14. UPDATE更新数据库数据详解
  15. Mybatis事务原理
  16. 【小旭学长-使用python进行城市数据分析】笔记篇(中)
  17. 鸿蒙 background_element设置渐变色
  18. 什么是Express框架
  19. 一遍搞定!关于如何已知后序和中序序列得到前序序列的问题
  20. 前端处理后端返回的excel文件流并下载

热门文章

  1. C语言绘图示例-分色调图20例
  2. Java高级-Lambda 表达式、异常处理、集合、泛型、List集合、Map集合、Collections类
  3. 为什么有些孩子有多动症?为什么有些孩子不快乐?
  4. Python代码循环执行exe文件,并传入命令参数实现批量处理数据。
  5. 微信小程序实现一个简单的表格
  6. arch linux 出现 edb7,EDB Linux Debugger 0.9.16
  7. Mipi SoundWire Spec 学习笔记(欢迎交流,持续更新)
  8. verilog中将fft转换成ifft
  9. GDUT2020新生赛——解题报告
  10. 引导盘的引导文件在哪