题面

解析

这个似乎并不好讲啊

设\(f[i][j]\)表示有\(i\)座山,

最后一座山到达高度是\(i\)座中第\(j\)大的,

且最后一座山是山谷.

注意,\(i\)是代表有\(i\)座山,并不代表高度一定是\(1\)~\(i\).

\(j\)也是一个类似于离散化的东西.

然后我们考虑设\(g[i][j]\),

除了最后一座山是山峰以外其它的定义和\(f[i][j]\)一样.

那么有式子\(f[i][j]=\sum_{k=j}^{i-1}g[i-1][k]\).

在这里讲一下最大和最小值的问题,

最大值可以随便往大了取,

但考虑到前\(i\)座山的最后一座一定比前\(i-1\)座的小(因为是山谷),

所以最后一座是第\(j\)大那它前面一座在前\(i-1\)座山中的排名就不可能小于\(j\).

(可能表达有点不太清楚,感性理解下吧.)

还有一件显然的事,

如果有一个合法的方案,

那我们把每座山的高度\(h_i\)换成\(n-h_i+1\),方案依然合法(就是把山峰换成了山谷).

因此\(g[i][j]=f[i][i-j+1]\).

合并一下就变成了\(f[i][j]=\sum_{k=1}^{i-j}f[i-1][k]\).

而这个相当于一个后缀和的东西.

因此DP式就是\(f[i][j]=f[i][j+1]+f[i-1][i-j]\).

用滚动数组优化下空间就行了.

#include <iostream>
#include <cstdio>
#include <cstring>
#define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
using namespace std; inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
} const int N=4301;
int n,Mod,f[2][N];
int ans=0; int main(){
n=read();Mod=read();
f[1][1]=1;int now=1;
for(int i=2;i<=n;i++){
now^=1;memset(f[now],0,sizeof(f[now]));
for(int j=i-1;j;j--) f[now][j]=(f[now][j+1]+f[now^1][i-j])%Mod;
}
for(int i=1;i<=n;i++) ans=(ans+f[now][i])%Mod;
printf("%d\n",(ans<<1)%Mod);
return 0;
}

题解 [BZOJ1925][SDOI2010] 地精部落的更多相关文章

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

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

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

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

  3. BZOJ1925[SDOI2010]地精部落

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

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

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

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

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

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

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

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

随机推荐

  1. SQL0668N Operation not allowed for reason code "3" on table "TEST". SQLSTATE=57016

    问题描述: 查询,操作表都报如下错误 SQL0668N  Operation not allowed for reason code "3" on table "TEST ...

  2. HDU 1811 并查集+拓扑排序

    Rank of Tetris 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1811 Problem Description 自从Lele开发了Rati ...

  3. nginx 实践配置

    nginx.conf文件 user root; worker_processes 1; error_log logs/error.log crit; #error_log logs/error.log ...

  4. Spring MVC 探讨DispatcherServlet

    先上DispatcherServlet的运行流程图(request processing):

  5. springboot由于bean加载顺序导致的问题

    先记录现象: dubbo整合zipkin时,我的配置文件是这样的 @Bean("okHttpSender") public OkHttpSenderFactoryBean okHt ...

  6. springboot内置tomcat配置虚拟路径

    在Springboot中默认的静态资源路径有:classpath:/METAINF/resources/,classpath:/resources/,classpath:/static/,classp ...

  7. Oracle设置权限和还原数据库

    Oracle还原数据库 ,在最高权限账户上,先将安装好的数据上创建一个账户 -- Create the user create user newsafe identified by newsafe d ...

  8. CF336C-Vasily the Bear and Sequence题解--贪心

    题目链接 https://www.luogu.org/problemnew/show/CF336C 分析 一个比较妙的贪心 我们要让最后\(and\)起来的数被\(2^k\)整除且\(k\)最大,我们 ...

  9. Java获取近7个月的起止时间

    话不多说,直接上代码 public class Test { @org.junit.Test public void tets() { SimpleDateFormat format = new Si ...

  10. 行级安全(Row

    通过授予和拒绝(Grant/Deny)命令控制用户的权限,只能控制用户对数据库对象的访问权限,这意味着,用户访问的粒度是对象整体,可以是一个数据表,或视图等,用户要么能够访问数据库对象,要么没有权限访 ...