[bzoj1925][DP]地精部落
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]地精部落相关推荐
- BZOJ1925: [Sdoi2010]地精部落
BZOJ1925: [Sdoi2010]地精部落 Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中. 具体地说,一座长度为 N 的山脉 H可分 为 ...
- bzoj1925: [Sdoi2010]地精部落 [dp]
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
- BZOJ1925 [Sdoi2010]地精部落 【dp】
题目 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...
- [BZOJ1925][SDOI2010]地精部落(DP)
题意 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...
- bzoj1925 [Sdoi2010] 地精部落
题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其中Hi是1到N之间的正整数 ...
- [bzoj1925][Sdoi2010]地精部落
大佬们好神啊,考试都切掉了这题,,本来以为T3可做写完发现不对结果T2还崩了.qwq好闹心啊... 找到了一个不玄乎的题解至少转移我看懂了..clj的都太神了我等蒟蒻不能理解qwq 转自 http:/ ...
- [BZOJ1925]地精部落
地精部落 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精.地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其中Hi是1到N之间 ...
- bzoj1925【sdoi2010】地精部落
1925: [Sdoi2010]地精部落 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 797 Solved: 487 [ Submit][ S ...
- DP [Sdoi2010]地精部落
问题 H: [Sdoi2010]地精部落 时间限制: 1 Sec 内存限制: 64 MB 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 ...
最新文章
- switch...case结构
- Spring Boot 中的 RestTemplate不好用?试试 Retrofit !
- python exec
- 初识contiki(2.7版本)
- ubuntu修改pip的官方源为豆瓣源
- c语言RePutDate用法,住宿结帐管理系统--C语言课程设计.doc
- Android NDK开发Crash错误定位
- numpy 辨异(一) —— reshape 与 resize
- 深入理解JVM一JVM内存模型
- HDU2516 取石子游戏
- JS获取URL传过来的参数
- rs485接口上下拉_RS485上拉下拉电阻计算详解
- Redhat8 配置使用阿里源(关闭官方订阅)
- UPDATE更新数据库数据详解
- Mybatis事务原理
- 【小旭学长-使用python进行城市数据分析】笔记篇(中)
- 鸿蒙 background_element设置渐变色
- 什么是Express框架
- 一遍搞定!关于如何已知后序和中序序列得到前序序列的问题
- 前端处理后端返回的excel文件流并下载