[BZ1925] [SDOI2010]地精部落
[BZ1925] [SDOI2010]地精部落
一道很有意思的DP题。
我们发现因为很难考虑每个排列中的数是否使用过,所以我们想到只维护相对关系。
当我们考虑新的一个位置时,给新的位置的数分配一个排名(可以理解为把这个位置的大小插入在原来两个位置的大小的中间)。
所以令\(dp[i][j][0/1]\)表示前i个数,第i个数在前i个数中排名为j,最后两个数是上升/下降时的相对关系的方案数。
那么有:
dp[i][j][1]=\sum_{k=j}^{i-1}dp[i-1][k][0]\\
dp[1][1][1]=dp[1][1][0]=1;
\]
然后前缀和优化一下:
f[i][j][1]=\sum_{k=1}^{j}dp[i][j][1]\\
\]
那么转移就是:
dp[i][j][1]=f[i-1][i-1][0]-f[i-1][j-1][0]\\
初始化:f[1][1][0]=f[1][1][1]=1
\]
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
const int maxn=4500;
using namespace std;
int n,p;
int dp[2][maxn][2],f[2][maxn][2];
int main() {
scanf("%d%d",&n,&p);
dp[1][1][0]=dp[1][1][1]=f[1][1][1]=f[1][1][0]=1;
for(int i=2;i<=n;i++) {
int md=i&1;
for(int j=1;j<=i;j++)dp[md][j][0]=dp[md][j][1]=0;
for(int j=1;j<=i;j++) {
dp[md][j][0]+=f[md^1][j-1][1];dp[md][j][0]%=p;
dp[md][j][1]+=f[md^1][i-1][0]-f[md^1][j-1][0];dp[md][j][1]%=p;
}
for(int j=1;j<=i;j++) {
f[md][j][0]=f[md][j-1][0]+dp[md][j][0];f[md][j][0]%=p;
f[md][j][1]=f[md][j-1][1]+dp[md][j][1];f[md][j][1]%=p;
}
}
printf("%d",(((f[n&1][n][1]+f[n&1][n][0])%p)+p)%p);
}

[BZ1925] [SDOI2010]地精部落的更多相关文章
- BZOJ 1925: [Sdoi2010]地精部落( dp )
dp(i,j)表示1~i的排列中, 以1~j为开头且开头是下降的合法方案数 这种数列具有对称性, 即对于一个满足题意且开头是上升的n的排列{an}, 令bn = n-an+1, 那么{bn}就是一个满 ...
- BZOJ_1925_[Sdoi2010]地精部落_递推
BZOJ_1925_[Sdoi2010]地精部落_递推 Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 ...
- 【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可分 为从 ...
- [bzoj1925][Sdoi2010]地精部落_递推_动态规划
地精部落 bzoj-1925 Sdoi-2010 题目大意:给你一个数n和模数p,求1~n的排列中满足每一个数的旁边两个数,要么一个是边界,要么都比它大,要么都比它小(波浪排列个数) 注释:$1\le ...
- bzoj1925 [Sdoi2010] 地精部落【DP】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1925 一个多月前“过”了这道题,还自欺欺人地认为懂了这道题,这直接导致了昨晚多校联测2的T3 ...
- BZOJ1925[SDOI2010]地精部落
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
- bzoj 1925 [Sdoi2010]地精部落(DP)
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
随机推荐
- pymysql模块常用操作
pymysql安装 pip install pymysql 链接数据库.执行sql.关闭连接 import pymysql user = input('请输入用户名请输入密码:').strip() p ...
- HTML+CSS学习笔记整理二
盒子模型CSS(重点) 边框border 边框通常使用连写border:1px(边框大小) solid(实线或其他) red(颜色) border-collapse:collapse (合并 ...
- Vert.x(vertx) 认证和授权
每个线上系统几乎都是离不开认证和授权的,Vert.x提供了灵活.简单.便捷的认证和授权的支持.Vert.x抽象出了两个核心的认证和授权的接口,一个是 AuthProvider,另一个是User.通过这 ...
- python 进程和线程-简介及进程
进程和线程的关系及应用 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017627212385376 多任务: 什么叫“多任务”呢?简 ...
- 2019-11-07 微信小程序入门
1.什么是微信小程序? 小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”,用户扫一扫或者搜一下即可打开应用,体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题.应用将无处不 ...
- 为啥git会这么差!!!!
删除分支 git push origin --delete Chapater6 可以删除远程分支Chapater6 git branch -d Chapater8 可以删除本地分支(在主分支中) ...
- 在小程序中实现 Mixins 方案
摘要: 小程序开发技巧 作者:jrainlau 原文:在小程序中实现 Mixins 方案 Fundebug经授权转载,版权归原作者所有. 在原生开发小程序的过程中,发现有多个页面都使用了几乎完全一样的 ...
- js 字符串换行 显示 使用 \ 转义
js 字符串 有没有 像C# @ 那种 换行也可以显示的方法\
- Oracle的功能性sql
--创建表空间 CREATE TABLESPACE FSNEW DATAFILE 'E:\oracle\oracledata\oradata\FSNEW' SIZE 30G EXTENT MANAGE ...
- Robot Framework RIDE简单使用
Testproject Testsuite Testcase 1.创建测试项目 打开RIDE,点击File--New Project,选择项目路径,填入项目名称 2.右键点击新建的测试项目,选择New ...