[sdoi 2010][bzoj 1925]地精部落(神仙dp)
Description
Input
Output
Sample Input
Sample Output
数据范围与提示
对于 20%的数据,满足 N≤10;
对于 40%的数据,满足 N≤18;
对于 70%的数据,满足 N≤550;
对于 100%的数据,满足 3≤N≤4200,P≤10^9
神仙题,太神仙了
最近在做组合数学,然后一看到这道题就想去打表找规律。手模了几组小样例后发现真的是毫无规律可言,于是开始找各种性质深陷其中,未果,寻病终。
然鹅,手模万岁
最后开始找i个数和i+1个数之间的关系,不断地往上一个序列里插数,过了一会转念一想,嗯?嗯?嗯?这不dp吗
然后就往dp上面想,这题总的来说还是思考了挺长时间。
一开始我想的是f[i][j]表示[1~i]的数且首项为j的方案总数(没想到这个状态数组定义的还挺接近于正解)。
然后又开始各种找规律,又手模了半天自己也发现了一些性质,但对于状态转移没有什么用,实在是想不出来了,就颓了题解。
题解真是神仙(蒟蒻博主看什么都神仙)。
我们姑且称满足题意的序列为抖动序列
首先我们来证明一波性质:
- 对于一个抖动序列,若j与j+1不相邻,则交换j与j+1后的序列仍为抖动序列。证明:若j与j+1不相邻那么与j或j+1相邻的数与j或j+1的差值至少为2,那么显然交换之后此序列仍为抖动序列。
- 如果将一个抖动序列中所有大于等于x的元素都加1,那么此序列仍为抖动序列。证明:我们先考虑每一个波谷和其两侧的波峰,我们可以分情况讨论若此部分三个数均大于或小于x,显然成立,如果此部分波谷小于x,而波峰大于x,加一,显然成立,因为每个小部分都成立,所以总体成立。(蒟蒻博主自己瞎搞的,可能是伪证,大神觉得有问题请指正)
- 把一个抖动序列的每一项i都变成n-i+1,那么此序列仍为抖动序列。证明(这绝逼是伪证,博主蒟蒻,各位神犇凑或者看吧):(感受一下)其实这个定理大家想想就能想明白,就相当于如果一个数很大,那么减掉它之后就会变成一个小数,反之亦然,并且大小关系倒置。
然后就可以dp了,我们设f[i][j]为已经有i个数,且首项为j且j为波峰的方案总数。
既然确定了首项,我们在来考虑第二项,若第二项不为j-1,那么根据引理1,我们把所有这种情况下的序列都交换j与j-1的位置,交换之后的序列仍为抖动序列,那么这种情况方案数为f[i][j-1]。
我们在来考虑第二项为j-1的情况,这种情况就比较麻烦,我们去掉第一个数j后,所剩下的就只有[1~j-1]和[j+1~i],考虑把第二个区间减一那么就得到了一个[1~i-1]的抖动序列,再使j-1为波谷,
根据引理3,此种情况方案总数为f[i-1][i-1-(j-1)+1]=f[i-1][i-j+1]。
因为对称性我们把ans×2,就的到了结果。
下面是代码,用了滚动数组省空间
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define int long long
const int M=;
using namespace std;
int f[][M];
signed main(){
int n,p;
scanf("%lld%lld",&n,&p);
int now=,pre=;
f[now][]=;
for(int i=;i<=n;i++){
swap(now,pre);
for(int j=;j<=i;j++){
f[now][j]=(f[now][j-]+f[pre][i-j+])%p;
}
}
int ans=;
for(int i=;i<=n;i++){
ans=(ans+f[now][i])%p;
}
ans*=;
printf("%lld",(ans%p+p)%p);
}
地精部落
9
[sdoi 2010][bzoj 1925]地精部落(神仙dp)的更多相关文章
- BZOJ 1925 地精部落(DP)
一道很经典的DP题. 题意:求n排列中波动排列的种数. 不妨考虑DP,令dp1[i][j],表示1-j的排列中,第一项为i之后递增的波动排列种数.dp2[i][j]表示1-j的排列中,第一项为i之后递 ...
- [SDOI2010][BZOJ 1925]地精部落
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
- bzoj 1925 地精部落
Written with StackEdit. Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 \(N\) 的山脉 \(H ...
- BZOJ 1925地精部落题解
题目链接 一道神仙题,有很多思考的方式,这里选择最好理解的一种来讲 我们将序列分为两种,一种开头递增,一种开头递减,显然这两种序列的数目是一样的 现在我们只用考虑开头递增的情况 f[i][j]表示前i ...
- BZOJ-1925 地精部落 烧脑DP+滚动数组
1925: [Sdoi2010]地精部落 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1053 Solved: 633 [Submit][Status ...
- 【BZOJ1925】[Sdoi2010]地精部落 组合数+DP
[BZOJ1925][Sdoi2010]地精部落 Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从 ...
- bzoj1925 [Sdoi2010] 地精部落【DP】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1925 一个多月前“过”了这道题,还自欺欺人地认为懂了这道题,这直接导致了昨晚多校联测2的T3 ...
- bzoj 1925 [Sdoi2010]地精部落(DP)
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
- bzoj 1925: [Sdoi2010]地精部落【dp】
设[f[i][j]为1到i,开头数字是j并且是山峰的方案数 注意到当数字j和j-1不相邻时,交换它们会得到一个新的符合要求的序列,所以f[i][j]+=f[i][j-1]; 如果相邻,那么j是山峰,j ...
随机推荐
- python的文件读写操作
文件读写 本文转自廖雪峰老师的教程https://www.liaoxuefeng.com/wiki/1016959663602400/1017607179232640 读写文件是最常见的IO操作.Py ...
- Spring boot data jpa 示例
一.maven pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns ...
- 题解 CF670C 【Cinema】
题目链接: https://www.luogu.org/problemnew/show/CF670C 思路: step-1: 语言的数据范围是10^9,所以我们采取用map离散化,这样就能方便且不ML ...
- Facebook 一个热搜帖,美国一个老人癌症不治最后的心愿是跟儿子喝啤酒。
今天早上起床看到这个Facebook上的热搜帖.太感动了.这个老人癌症不治后最后心愿是跟他的儿子们一起喝一次啤酒.这个帖子被他孙子贴上网以后牵动了千万人的心.
- 简单了解webservice
webservice是什么 WebService是一种跨编程语言.跨操作系统平台的远程调用技术. 远程调用技术:远程调用是指一台设备上的程序A可以调用另一台设备上的方法B. 跨编程语言:是指服务端.客 ...
- 【转】CnBlogs自定义博客样式
文章有一个好的排版,将能够增加阅读者对其内容的兴趣. 本文总结了如何美化博客园中文章的部分显示样式. 1.美化文章标题的显示样式 2.增添LaTex数学公式的显示 3.目录索引的显示 4.添加文章末尾 ...
- js之常用正则
//用户名正则,4到16位(字母,数字,下划线,减号) let uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //密码强度正则,最少6位,包括至少1个大写字母,1个小写字母, ...
- vue-loading图
父组件给子组件src地址: columns(){ return [ {'title': '图片', 'key': 'img', render(h, {row}){ return h(LoadingIm ...
- WebApi 跨域解决方案 --CORS
跨站HTTP请求(Cross-site HTTP request)是指发起请求的资源所在域不同于请求指向的资源所在域的HTTP请求. 比如说,我在Web网站A(www.a.com)中通过<img ...
- hive--构建于hadoop之上、让你像写SQL一样编写MapReduce程序
hive介绍 什么是hive? hive:由Facebook开源用于解决海量结构化日志的数据统计 hive是基于hadoop的一个数据仓库工具,可以将结构化的数据映射为数据库的一张表,并提供类SQL查 ...