luogu2467/bzoj1925 地精部落 (dp)
求1~n组成一个抖动序列的方案数
首先这种序列有一些非常妙妙但我发现不了的性质
1.对于一个抖动序列,如果i和i+1不相邻,则交换i和i+1,他还是个抖动序列
2.对于一个抖动序列,我把每个数拿n+1减一下(上下翻转),他还是个抖动序列,只不过波峰和波谷换了一下
3.对于一个抖动序列,我把它左右翻转,他还是个抖动序列
于是设f[i][j]是i个数中,排名为j的数在第一个位置、且它是波峰的方案数
那么答案就是$2\sum{f[N][i]}$(我把它翻一下不就有所有的第一个数作为波谷的情况了嘛)
然后有方程$f[i][j]=f[i][j-1]+f[i-1][j-1]$
考虑两种情况:
1.j和j-1不相邻,由性质1这种情况的f[i][j]就是f[i][j-1]
2.j和j-1相邻,也就是j-1在第二个位置,这种情况的f[i][j]就是f[i-1][j-1],就是不看j,然后把剩下的i-1个数拎出来,那j-1的排名还是j-1
合起来就是上面的方程
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define pa pair<ll,ll>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=; inline char gc(){
return getchar();
static const int maxs=<<;static char buf[maxs],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,maxs,stdin),p1==p2)?EOF:*p1++;
}
inline ll rd(){
ll x=;char c=gc();bool neg=;
while(c<''||c>''){if(c=='-') neg=;c=gc();}
while(c>=''&&c<='') x=(x<<)+(x<<)+c-'',c=gc();
return neg?(~x+):x;
} int N,f[][maxn],P; int main(){
//freopen("","r",stdin);
int i,j,k;
N=rd(),P=rd();
f[][]=;
for(i=;i<=N;i++){
for(j=;j<=i;j++){
f[i&][j]=(f[i&][j-]+f[!(i&)][i-j+])%P;
}
}
int ans=;
for(i=;i<=N;i++)
ans+=f[N&][i],ans%=P;
printf("%d\n",ans*%P);
return ;
}
luogu2467/bzoj1925 地精部落 (dp)的更多相关文章
- Luogu2467 SDOI2010 地精部落 DP
传送门 一个与相对大小关系相关的$DP$ 设$f_{i,j,0/1}$表示放了$i$个,其中最后一个数字在$i$个中是第$j$大,且最后一个是极大值($1$)或极小值时($0$)的方案数.转移: $$ ...
- 【题解】地精部落(DP)
[题解]地精部落(DP) 设\(f_i\)表示强制第一个是谷的合法方案数 转移枚举一个排列的最大值在哪里,就把序列分成了互不相干的两个部分,把其中\(i-1\choose j-1\)的数字分配给前面部 ...
- BZOJ-1925 地精部落 烧脑DP+滚动数组
1925: [Sdoi2010]地精部落 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1053 Solved: 633 [Submit][Status ...
- BZOJ 1925: [Sdoi2010]地精部落( dp )
dp(i,j)表示1~i的排列中, 以1~j为开头且开头是下降的合法方案数 这种数列具有对称性, 即对于一个满足题意且开头是上升的n的排列{an}, 令bn = n-an+1, 那么{bn}就是一个满 ...
- bzoj1925 地精部落
神题! 地精部落 内存限制:128 MiB 时间限制:1000 ms 标准输入输出 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度 ...
- [BZOJ1925][SDOI2010]地精部落(DP)
题意 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...
- wxy和zdy眼中的水题 地精部落 dp
题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到 ...
- 【BZOJ】1925: [Sdoi2010]地精部落 DP+滚动数组
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1925 题意:输入一个数N(1 <= N <= 4200),问将这些数排列成折线 ...
- [SDOI2010]地精部落 DP
LG传送门 DP好题 题意很简单,就是求1-n的排列,满足一个数两边的数要么都比它大要么都比它小,求这样的排列个数对\(p\)取膜的值(为了表述简单,我们称这样的排列为波动序列). 这个题我第一眼看到 ...
随机推荐
- Tomcat v7.0 java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
十二月 , :: 下午 org.apache.coyote.http11.AbstractHttp11Processor process 信息: Error parsing HTTP request ...
- Laravel 门面实例教程 —— 创建自定义 Facades 类
我们首先创建一个需要绑定到服务容器的Test类: <?php namespace App\Facades; class Test { public function doSomething() ...
- 使用NFS时的一些问题
当我把nfs服务端共享目录/usr/local/data/test删掉时,在nfs客户端却没办法把之前挂载在这上面的当前从机上的/usr/local/data/test删除,出现 bash: cd: ...
- @Param注解
关于mybatis的@Param注解和参数 引用 https://www.cnblogs.com/whisper527/p/6568028.html 薇飘意 1,使用@Param注解 当以下面的方式进 ...
- eclipse 部署项目
- java中级——集合框架【2】-二叉树
二叉树 二叉树概念 首先我们要明确,二叉树由各种节点组成:还有就是二叉树特点:(1)每个节点都可以有左子节点,右子节点(2)每一个节点都有一个值 如图所示: 代码所示: package cn.jse. ...
- WorldCount代码检查与优化——软件测试第三次作业
合作者:201631062222,201631062232 代码地址:https://gitee.com/biubiubiuLYQ/ceshi_secend 本次作业链接地址:https://edu. ...
- 谈谈对C#中反射的一些理解和认识(上)
今天就平常用到的非常多的反射这个技术来做一个总结,当然关于反射需要讲解的东西实在是太多的内容,在一片文章中想要讲解清楚是非常难的,本篇博客也是就自己本人对这些内容学习后的一个总结,当然包括看书和自己写 ...
- linux中一些特殊的中文文件不能删除问题
例: [root@iZ2zecl4i8oy1rvs00dqzeZ tmp]# ,),(,,' [root@iZ2zecl4i8oy1rvs00dqzeZ tmp]# echo "rm -rf ...
- MyBatis基础:MyBatis入门(1)
1. MyBatis简介 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyBatis ...