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个数结尾是jjj且结尾两个数递减的方案数。
那么显然有f[i][j]=g[i][i−j+1]f[i][j]=g[i][i-j+1]f[i][j]=g[i][i−j+1](考虑把第一个序列中每个数k都变成i-k+1)
且Ans=∑i=1n(f[n][i]+g[n][i])=2∗∑i=1nf[n][i]Ans=\sum _{i=1} ^n(f[n][i]+g[n][i])=2*\sum _{i=1} ^nf[n][i]Ans=∑i=1n(f[n][i]+g[n][i])=2∗∑i=1nf[n][i]
由于f[i][j]=∑k=1j−1g[i−1][k]f[i][j]=\sum _{k=1} ^{j-1} g[i-1][k]f[i][j]=∑k=1j−1g[i−1][k]
=>f[i][j]=∑k=1j−1f[i−1][i−1−k+1]f[i][j]=\sum _{k=1} ^{j-1} f[i-1][i-1-k+1]f[i][j]=∑k=1j−1f[i−1][i−1−k+1]
=>f[i][j]=∑k=1j−1f[i−1][i−k]f[i][j]=\sum _{k=1} ^{j-1} f[i-1][i-k]f[i][j]=∑k=1j−1f[i−1][i−k]
=>f[i][j]=∑k=i−j+1i−1f[i−1][k]f[i][j]=\sum _{k=i-j+1} ^{i-1} f[i-1][k]f[i][j]=∑k=i−j+1i−1f[i−1][k]
=>f[i][j−1]=∑k=i−j+2i−1f[i−1][k]f[i][j-1]=\sum _{k=i-j+2} ^{i-1} f[i-1][k]f[i][j−1]=∑k=i−j+2i−1f[i−1][k]
=>f[i][j]−f[i][j−1]=f[i−1][i−j+1]f[i][j]-f[i][j-1]=f[i-1][i-j+1]f[i][j]−f[i][j−1]=f[i−1][i−j+1]
=>f[i][j]=f[i][j−1]+f[i−1][]i−j+1f[i][j]=f[i][j-1]+f[i-1][]i-j+1f[i][j]=f[i][j−1]+f[i−1][]i−j+1
推导真妙啊。
注意要特判只有一个的情况。
以及要用滚动数组优化空间233
代码:
#include<bits/stdc++.h>
#define N 4205
using namespace std;
int f[2][N],p,n,ans=0,tmp=0;
int main(){
scanf("%d%d",&n,&p);
if(n==1)return cout<<1,0;
f[tmp][1]=1;
for(int i=2;i<=n;++i){
tmp^=1;
for(int j=1;j<=i;++j)f[tmp][j]=(f[tmp][j-1]+f[tmp^1][i-j+1])%p;
}
for(int i=1;i<=n;++i){
ans+=f[tmp][i];
if(ans>=p)ans-=p;
}
ans<<=1;
if(ans>=p)ans-=p;
cout<<ans;
return 0;
}
2018.10.20 bzoj1925: [Sdoi2010]地精部落(dp)的更多相关文章
- [BZOJ1925][SDOI2010]地精部落(DP)
题意 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...
- BZOJ 1925: [Sdoi2010]地精部落( dp )
dp(i,j)表示1~i的排列中, 以1~j为开头且开头是下降的合法方案数 这种数列具有对称性, 即对于一个满足题意且开头是上升的n的排列{an}, 令bn = n-an+1, 那么{bn}就是一个满 ...
- bzoj1925 [Sdoi2010] 地精部落【DP】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1925 一个多月前“过”了这道题,还自欺欺人地认为懂了这道题,这直接导致了昨晚多校联测2的T3 ...
- [bzoj1925][Sdoi2010]地精部落_递推_动态规划
地精部落 bzoj-1925 Sdoi-2010 题目大意:给你一个数n和模数p,求1~n的排列中满足每一个数的旁边两个数,要么一个是边界,要么都比它大,要么都比它小(波浪排列个数) 注释:$1\le ...
- BZOJ1925 [Sdoi2010]地精部落 【dp】
题目 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi,其中Hi是1到N ...
- BZOJ1925[SDOI2010]地精部落
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
- 【czy系列赛】czy的后宫4 && bzoj1925 [Sdoi2010]地精部落
[问题描述] czy有很多妹子,妹子虽然数量很多,但是质量不容乐观,她们的美丽值全部为负数(喜闻乐见). czy每天都要带N个妹子到机房,她们都有一个独一无二的美丽值,美丽值为-1到-N之间的整数.他 ...
- [bzoj1925][Sdoi2010][地精部落] (序列动态规划)
Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...
- BZOJ1925 [Sdoi2010]地精部落 动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1925 题意概括 给出n,n<=4200,问1~n这些数的排列中,有多少满足一下性质: 性质: ...
随机推荐
- Python之从头开始建立项目流程
一,需求是在桌面建立一个名字为美妆的项目 1)cd desktop 2)mkdir meizhuang_server 3)安装虚拟环境 要在meizhuang_server文件夹下 pipenv - ...
- mongodb基础学习1-基本说明及安装
以前看过一些mongodb的视频,但只看到一半没有看完,也没有同步安装软件动手操作,正好最近没事,打算花点时间从头学习一遍,边学习边动手操作,学习的过程在此进行记录. 好了,下面说一下今天的学习内容. ...
- 拓扑排序获取所有可能序列JAVA实现
在看算法基础这本书,看到有向无环图,其中介绍到了拓扑排序,讲到了获取拓扑序列的方法,结合自己的理解,用JAVA代码实现了获取所有可能序列,水平有限,效率什么的就没有考虑,下面贴上代码: package ...
- 更新日志(建议升级到2017.1.18a) && 更新程序的方法
更新程序的步骤: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...
- sql语句执行的时间
统计mysql里每条SQL语句执行的时间 收藏 CrazyHarry 发表于 2年前 阅读 3785 收藏 8 点赞 3 评论 3 Google.Github 双重认证前端课程,独家硅谷内容,每周直播 ...
- console.log等不能打印全部数据/信息
有时候console.log在chrome调试控制台打印不全,如下: 这个时候,我们可以点击进去:用watch 工具,添加变量,右击copy value 选项:
- 在Ubuntu上安装微信
1) 从https://github.com/geeeeeeeeek/electronic-wechat/releases地址中下载linux-x64.tar.gz文件到/opt/wechat文件夹 ...
- CSS的浮动(float)
问题:在练习过程中,发现div1浮动后,它下面的div被覆盖住了. 解决方案:清除该div1的浮动. 关于CSS的浮动 1.div是块级元素,独占一行 2.浮动可以理解为让某个div元素脱离标准流,漂 ...
- Unicode、UTF8与UTF16
1 概念 Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案 UTF是“Unicode Transformation Format”的缩写,可以翻译成Unicode字符集转换格式 ...
- hdoj1003 DP
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...