BZOJ_1925_[Sdoi2010]地精部落_递推
BZOJ_1925_[Sdoi2010]地精部落_递推
Description
Input
Output
Sample Input
Sample Output
HINT
对于 20%的数据,满足 N≤10;
对于 40%的数据,满足 N≤18;
对于 70%的数据,满足 N≤550;
对于 100%的数据,满足 3≤N≤4200,P≤109
分析:好题。设$f[i][j]$ 为i个不同的数,第一个数排名小于等于$j$ ,且第一个数为山峰的方案数。
转移方程$f[i][j]=f[i][j-1]+f[i-1][i-j]$ .$f[i][j-1]$ 表示把排名小于j的加入贡献。
然后考虑第一个数为排名第$j$ 的情况,第二个数肯定要做山谷,那么第二个数只能选后$i-1$ 个数中排名第$1\thicksim j-1$ 这些数中的一个。
但我们的$f$ 数组表示第一个数为山峰的方案,不妨把这$i-1$ 个数从大到小排序,那么第$j-1$ 小的数就是序列第$i-j$大的数。
发现此时$f[i][j]$的意义可以是"$i$ 个不同的数,第一个数排名小于等于$j$ ,且第一个数为山峰的方案数"
也可以是“$i$个不同的数,第一个数排名大于等于$i-j+1$,且第一个数为山谷的方案数”。
转移中的$f[i-1][i-j]$就可以理解了。
空间需要滚动数组。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
typedef long long ll;
ll f[2][4550],p;
int n;
int main() {
scanf("%d%lld",&n,&p);
if(n==1) {
printf("%d\n",1%p); return 0;
}
int i,j;
f[1][1]=1;
for(i=2;i<=n;i++) {
for(j=1;j<=i;j++) {
f[i&1][j]=(f[i&1][j-1]+f[i-1&1][i-j])%p;
}
}
printf("%lld\n",f[n&1][n]*2%p);
}
BZOJ_1925_[Sdoi2010]地精部落_递推的更多相关文章
- [bzoj1925][Sdoi2010]地精部落_递推_动态规划
地精部落 bzoj-1925 Sdoi-2010 题目大意:给你一个数n和模数p,求1~n的排列中满足每一个数的旁边两个数,要么一个是边界,要么都比它大,要么都比它小(波浪排列个数) 注释:$1\le ...
- SDOI 2010 and SXOI 2014 地精部落 (递推)
用E[i,j]表示共有i个数字,以1..j开头且一开始下降的方案数的总和.则我们有: E[i,j]:=E[I,J-1]+E[i-1,i-j] 我们先来证明上升与下降的方案是一一对应的. 事实上,若有a ...
- BZOJ 1925: [Sdoi2010]地精部落( dp )
dp(i,j)表示1~i的排列中, 以1~j为开头且开头是下降的合法方案数 这种数列具有对称性, 即对于一个满足题意且开头是上升的n的排列{an}, 令bn = n-an+1, 那么{bn}就是一个满 ...
- 【BZOJ1925】[SDOI2010]地精部落(动态规划)
[BZOJ1925][SDOI2010]地精部落(动态规划) 题面 BZOJ 洛谷 题解 一道性质\(dp\)题.(所以当然是照搬学长PPT了啊 先来罗列性质,我们称题目所求的序列为抖动序列: 一个抖 ...
- 1925: [Sdoi2010]地精部落
1925: [Sdoi2010]地精部落 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1929 Solved: 1227 [Submit][Statu ...
- 【BZOJ1925】[Sdoi2010]地精部落 组合数+DP
[BZOJ1925][Sdoi2010]地精部落 Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从 ...
- [BZ1925] [SDOI2010]地精部落
[BZ1925] [SDOI2010]地精部落 传送门 一道很有意思的DP题. 我们发现因为很难考虑每个排列中的数是否使用过,所以我们想到只维护相对关系. 当我们考虑新的一个位置时,给新的位置的数分配 ...
- [SDOI2010]地精部落
题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个[b][u]独一无二[/u][/b]的高度Hi, ...
- 【bzoj1925】[Sdoi2010]地精部落 组合数学+dp
题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到 ...
随机推荐
- Day7 子类调用父类的方法supper 绑定方法与非绑定方法
supper:可以利用supper来重用父类的方法,可以不用指名道姓的调用了. class OldboyPeople: school = 'oldboy' def __init__(self,name ...
- SQL Server 表的管理_关于完整性约束的详解(案例代码)
SQL Server 表的管理之_关于完整性约束的详解 一.概述: ●约束是SQL Server提供的自动保持数据库完整性的一种方法, 它通过限制字段中数据.记录中数据和表之间的数据来保证数据的完整性 ...
- Maven编译中的一些坑
错误1: invalid LOC header 这个错误比较好解决,jar下载不完全,去到相应的Maven包目录,把东西删掉重新编译就行. 错误2: java.lang.TypeNotPresentE ...
- vfd折腾(二)
这篇是前期程序部分,主要讲驱动pt6311的程序 电路见上一篇博文 #ifndef PT6311_H #define PT6311_H #include "sys.h" #incl ...
- RabbitMQ In JAVA 介绍及使用
介绍: RabbitMQ是开源的消息中间件,它是轻量级的,支持多种消息传递协议,可以部署在分布式和联合配置中,以满足高级别.高可用性需求.并且可在许多操作系统和云环境上运行,并为大多数流行语言提供了广 ...
- JS入门熟知
JS是面向对象的语言 封装 继承 多态 聚集(对象中具有引用其他对象的能力) JS使用中绝大多数情况不需要进行面向对象的设计,很多情况是使用已经设计好,准备好的对象,基于对象的语言. JS的使用(引入 ...
- CSS学习笔记六:写原生导航栏
因为刚开始学习CSS时,只了解了一些基本样式,然后就跑去学习bootstrap.bootstrap是个不错的东西,挺好玩,起码让你写界面写的轻轻松松,几行引入代码,再来个复制粘贴就解决了,而且boot ...
- Docker 多主机网络总结(非常全)
PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...
- vh、vw、vmin、vmax 知多少
介绍一些 CSS3 新增的单位,平时可能用的比较少,但是由于单位的特性,在一些特殊场合会有妙用. vw and vh 1vw 等于1/100的视口宽度 (Viewport Width) 1vh 等于1 ...
- 【转】sentry 实时事件日志聚合平台
1.install postgreSQL(v9.6)2.pip install sentry(v8.13.0)3.sentry init #初始化配置文件 4.配置好postgreSQL 需要连接re ...