【BZOJ1925】[SDOI2010]地精部落(动态规划)
【BZOJ1925】[SDOI2010]地精部落(动态规划)
题面
题解
一道性质\(dp\)题。(所以当然是照搬学长PPT了啊
先来罗列性质,我们称题目所求的序列为抖动序列:
- 一个抖动序列的连续子序列还是一个抖动序列。
- 如果在一个抖动序列中\(x\)与\(x+1\)不相邻,那么交换两者的位置这个序列仍是抖动序列。
- 如果将一个抖动序列中所有大于\(x\)的元素全部\(+1\),那么这个序列仍然是抖动序列。
- 一个\([1,x]\)的抖动序列可以映射到一个\([y-x+1,y]\)的抖动序列。
上面的性质都比较显然。证明什么的感性理解一下就好了。
现在来写\(dp\)。
设\(f[i][j]\)表示\([1,i]\)构成的排列中,第一个数为\(j\)的抖动序列的个数,并且强制第一个数大于第二个数,即第一个位置上是一个峰。
第一个数这已经确定,现在考虑第二个位置上的数。
如果这个数不是\(j-1\),那么我们必定可以交换\(j\)以及\(j-1\),不难发现这样子是一一对应的,也就是\(f[i][j]\leftarrow f[i][j-1]\)
否则这个数是\(j-1\)。那么我们先把第一个\(j\)个忽视掉,剩下的部分的值是\([1,j-1]\cup[j+1,i]\),那么我们这样子想,我们只需要剩下的这些值离散,变成了\([1,i-1]\),然后构成了一个以\(j-1\)开头的抖动序列,再把\([j+1,i-1]\)这一段全部加一,最后再把\(j\)放回到开头,这样子就可以得到一个抖动序列了。但是我们似乎没法直接从\(f[i-1][j-1]\)转移过来,因为在上述状态中\(j-1\)是一个峰,但是在\(f[i][j]\)的状态中,\(j-1\)是一个谷。然而并没有什么关系,我们用上面的最后一个结论,把所有的数全部映射一下,即\(j-1\)映射到\(i-j+1\)。那么就可以得到\(f[i][j]\leftarrow f[i-1][i-j+1]\)
那么这样子就可以\(dp\)了,转移方程是\(f[i][j]=f[i][j-1]+f[i-1][i-j+1]\)
那么答案就是\(\sum f[n][i]\)啦,但是别忘了这样子强制了第一个位置是峰,再映射一下,发现还要乘个二就可以把谷的贡献给算进来啦。
#include<iostream>
#include<cstdio>
using namespace std;
int n,MOD,f[2][4250],ans;
int main()
{
scanf("%d%d",&n,&MOD);f[0][1]=1;
for(int i=1,nw=1,pw=0;i<=n;++i,nw^=1,pw^=1)
for(int j=1;j<=i;++j)
f[nw][j]=(f[nw][j-1]+f[pw][i-j+1])%MOD;
for(int i=1;i<=n;++i)ans=(ans+f[n&1][i])%MOD;
ans=(ans+ans)%MOD;printf("%d\n",ans);
return 0;
}
【BZOJ1925】[SDOI2010]地精部落(动态规划)的更多相关文章
- BZOJ1925 [Sdoi2010]地精部落 动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1925 题意概括 给出n,n<=4200,问1~n这些数的排列中,有多少满足一下性质: 性质: ...
- [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, ...
- BZOJ1925[SDOI2010]地精部落
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
- [BZOJ1925][SDOI2010]地精部落(DP)
题意 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...
- BZOJ1925 [Sdoi2010]地精部落 【dp】
题目 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...
- 【czy系列赛】czy的后宫4 && bzoj1925 [Sdoi2010]地精部落
[问题描述] czy有很多妹子,妹子虽然数量很多,但是质量不容乐观,她们的美丽值全部为负数(喜闻乐见). czy每天都要带N个妹子到机房,她们都有一个独一无二的美丽值,美丽值为-1到-N之间的整数.他 ...
- 2018.10.20 bzoj1925: [Sdoi2010]地精部落(dp)
传送门 dp好题. 设f[i][j]f[i][j]f[i][j]表示iii个数结尾是jjj且结尾两个数递增的方案数. 那么显然可以对称的定义出g[i][j]g[i][j]g[i][j]表示iii个数结 ...
- 题解 [BZOJ1925][SDOI2010] 地精部落
题面 解析 这个似乎并不好讲啊 设\(f[i][j]\)表示有\(i\)座山, 最后一座山到达高度是\(i\)座中第\(j\)大的, 且最后一座山是山谷. 注意,\(i\)是代表有\(i\)座山,并不 ...
随机推荐
- Ubuntu 16.04 下部署Node.js+MySQL微信小程序商城
转载于这篇文章 关于pm2看这篇文章 最近在研究小程序,申请了域名之后,再一次来配置环境,根据作者的步骤基本上完成了网站的架构,但由于环境路径等不同,配置上会有所不同,因此记录下来. 1.更新系统和安 ...
- JS 去除重复元素的方法
Array.prototype.del = function () { var a = {}, c = [], l = this.length; ; i < l; i++) { var b = ...
- Python 学习 第七篇:函数1(定义、调用和变量的作用域)
函数是把一些语句集合在一起的程序结构,用于把复杂的流程细分成不同的组件,能够减少代码的冗余.代码的复用和修改代码的代价. 函数可以0个.1个或多个参数,向函数传递参数,可以控制函数的流程.函数还可以返 ...
- open-falcon ---客户机agent操作
open-falcon的agent用于采集机器负载监控指标,比如cpu.idle.load.1min.disk.io.util等等,每隔60秒push给Transfer.agent与Transfer建 ...
- C_数据结构_递归不同函数间调用
# include <stdio.h> void f(); void g(); void k(); void f() { printf("FFFF\n"); g(); ...
- B. Vova and Trophies
链接 [https://codeforces.com/contest/1082/problem/B] 题意 给你一个包含GS的字符串,只允许交换一次任意不同位置的字符,问最长的连续G串是多少 分析 很 ...
- 小学四则运算APP 最后阶段
团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 这次发布的是我们APP的最终版本!图片背景有根据用户需求改变!还增加了草稿纸运算的画布功能! 运行结果如下: package com.ex ...
- 在WIN10打造成能运行Oracle的JDK的Linux
1.开发WindowsFeature(程序)里的Linux扩展接口(其实从Windows2008发布前试用时,就发现悄悄藏着一个Unix接口选项). 2.在windows应用商店可以下载到Ubuntu ...
- K3CLOUD替代方案
路径 [生产制造]->[工程数据]->[替代方案]->[替代方案] 应用场景 实际业务处理中,由于订单取消.工程变更.客户需求变化.预测或计划不准确等原因造成原材料库存积压.呆滞,使 ...
- wps word改多级编号为2.1
右键标题1, 修改样式 编号 多级编号 标题1 2 3 右键标题2 修改样式 选择格式-编号 选择多级编号-标题1 2 3 直接点确定,OK. ---------------------------- ...