【BZOJ1925】[SDOI2010]地精部落(动态规划)

题面

BZOJ

洛谷

题解

一道性质\(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]地精部落(动态规划)的更多相关文章

  1. BZOJ1925 [Sdoi2010]地精部落 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1925 题意概括 给出n,n<=4200,问1~n这些数的排列中,有多少满足一下性质: 性质: ...

  2. [bzoj1925][Sdoi2010]地精部落_递推_动态规划

    地精部落 bzoj-1925 Sdoi-2010 题目大意:给你一个数n和模数p,求1~n的排列中满足每一个数的旁边两个数,要么一个是边界,要么都比它大,要么都比它小(波浪排列个数) 注释:$1\le ...

  3. bzoj1925 [Sdoi2010] 地精部落【DP】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1925 一个多月前“过”了这道题,还自欺欺人地认为懂了这道题,这直接导致了昨晚多校联测2的T3 ...

  4. [bzoj1925][Sdoi2010][地精部落] (序列动态规划)

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

  5. BZOJ1925[SDOI2010]地精部落

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

  6. [BZOJ1925][SDOI2010]地精部落(DP)

    题意 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...

  7. BZOJ1925 [Sdoi2010]地精部落 【dp】

    题目 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...

  8. 【czy系列赛】czy的后宫4 && bzoj1925 [Sdoi2010]地精部落

    [问题描述] czy有很多妹子,妹子虽然数量很多,但是质量不容乐观,她们的美丽值全部为负数(喜闻乐见). czy每天都要带N个妹子到机房,她们都有一个独一无二的美丽值,美丽值为-1到-N之间的整数.他 ...

  9. 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个数结 ...

  10. 题解 [BZOJ1925][SDOI2010] 地精部落

    题面 解析 这个似乎并不好讲啊 设\(f[i][j]\)表示有\(i\)座山, 最后一座山到达高度是\(i\)座中第\(j\)大的, 且最后一座山是山谷. 注意,\(i\)是代表有\(i\)座山,并不 ...

随机推荐

  1. el标签将时间戳转换为特定格式以及将数值保留特定小数

    jsp中/el表达式中将后台传来的时间戳格式化为年月日时分秒 1.引入相关标签库 <%@taglib prefix="c" uri="http://java.sun ...

  2. [Spark][python]以DataFrame方式打开Json文件的例子

    [Spark][python]以DataFrame方式打开Json文件的例子: [training@localhost ~]$ cat people.json{"name":&qu ...

  3. 机器学习sklearn19.0聚类算法——Kmeans算法

    一.关于聚类及相似度.距离的知识点 二.k-means算法思想与流程 三.sklearn中对于kmeans算法的参数 四.代码示例以及应用的知识点简介 (1)make_blobs:聚类数据生成器 sk ...

  4. 案例学python——案例二:连接数据库MySql

    调侃的话:案例一跑完之后,欣赏把玩了一番.人就有点飘飘然,昨天除了做饭吃饭,就是玩三国杀,江郎才尽,今天周一,不飘了,敲点代码,看看Python操作数据库有啥不一样的. 前期准备: 1.数据库 电脑上 ...

  5. Netdata---Linux系统性能实时监控平台部署记录

    通常来说,作为一个Linux的SA,很有必要掌握一个专门的系统监控工具,以便能随时了解系统资源的占用情况.下面就介绍下一款Linux性能实时监测工具-Netdata,它是Linux系统实时性能监测工具 ...

  6. A. Vasya and Chocolate

    链接 [http://codeforces.com/contest/1065/problem/A] 分析 一个公式完事 代码 #include<bits/stdc++.h> using n ...

  7. 2017-2018-2 1723《程序设计与数据结构》第八周作业 & 实验二 & 第一周结对编程 总结

    作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...

  8. 面向对象课程 - T-shirt

    拿到了一件谜一样的T-shirt 吓得我赶紧捏了下hbb

  9. shiro课程的学习

    1.shiro的课程目标 (1)shiro的整体框架 各组件的概念 (2)shiro 认证 授权的过程 (3)shiro自定义的Reaml Filter (4)shiro session 管理 (5) ...

  10. java基础知识点罗列

    1:Java泛型 2:clone Java中的深拷贝(深复制)和浅拷贝(浅复制)   Java中对Clone的理解  序列化和反序列化的概念 3:Java中有关Null的9件事