[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 ...
随机推荐
- 进阶Java编程(3)线程的同步与死锁
线程的同步与死锁 1,同步问题引出 在多线程的处理之中,可以利用Runnable描述多个线程操作的资源,而Thread描述每一个线程对象,对于当多个线程访问统一资源的时候如果处理不当就会产生数据的错误 ...
- C#文本_文件夹操作
1我们常用的File类 可以用来对文件的一些操作 下面看代码. using System;using System.Collections.Generic;using System.IO;using ...
- 实现a标签按钮完全禁用
前言 最近在开发时遇见一个问题 我们知道a标签的disabled属性部分浏览器支持,但是尽管设置了disabled属性也无法阻挡任何鼠标经过或是点击事件的,那么如何实现a标签按钮的禁用呢? 转换一下思 ...
- SIP笔记
消息代号: 1)1XX:临时响应,表示请求消息正在被处理. 2)2XX:成功响应,表示请求已被成功接收,完全理解并被接受. 3)3XX:重定向响应,表示需采取进一步以完成该请求. 4)4XX:客户机错 ...
- python与pip
python , pip 相关命令汇总 1) 在python3 下升级pip3 pip3 install --upgrade pip
- 【Git的基本操作十】远程库分支操作
远程库分支操作 1. 推送分支 在本地库新建分支 git branch [新分支名] 如创建一个develop分支: git branch develop 推送分支(将新分支发布在github上) g ...
- BAT面试笔试33题:JavaList、Java Map等经典面试题!答案汇总!
JavaList面试题汇总 1.List集合:ArrayList.LinkedList.Vector等. 2.Vector是List接口下线程安全的集合. 3.List是有序的. 4.ArrayLis ...
- Linux 下vim命令详解
原博文:https://www.cnblogs.com/zknublx/p/6058679.html 高级一些的编辑器,都会包含宏功能,vim当然不能缺少了,在vim中使用宏是非常方便的: :qx ...
- Delphi 10.3.2来了!
昨晚,官方正式发布了Delphi 10.3.2,增加对Mac 64应用的开发,支持Linux桌面开发,这个是通过集成fmxlinux实现的,同时修正400个bug,编译器,102个ide,84个fmx ...
- [ZOJ 4025] King of Karaoke
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5766 求两个序列的相对元素的差出现次数最多的,最低出现一次. AC代 ...