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这些数的排列中,有多少满足一下性质: 性质: ...
随机推荐
- DSHTTPService
DSHTTPService Filters 压缩过滤器的使用 The Filters property specifies the DataSnap communication filters for ...
- DB2 to mysql
1.安装DB2 create database testdb connect to testdb 2. 将DB2 ixf格式into DB2 IMPORT FROM /tabxxx.IXF OF IX ...
- 尚硅谷STRUTS2视频学习笔记
上一个月一直在学习STRUTS2,学习的是尚硅谷佟刚老师的视频,因为很喜欢佟刚老师的声音,而且他讲的很细,笔记做的也多,基本上是照着他的视频完整的敲了一遍代码,下面就把学习到的知识梳理一遍,最后把项目 ...
- JAVA学习(七)__Spring的@Autowired注入规则
@Autowired 默认是按照byType进行注入的,但是当byType方式找到了多个符合的bean,又是怎么处理的? 经过一些代码的测试,我发现,Autowired默认先按byType,如果发现找 ...
- java开源项目jremoting
https://github.com/jremoting/jremoting jremoting是一个类似dubbo的rpc服务治理框架,并且可以与dubbo相互调用.jremoting的实现是参考了 ...
- js中函数传参的情况
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- destoon 分页
php: global $pagesize,$page; $pagesize = 10;//分页改为10条一页 $offset or $offset = ($page-1)*$pagesize; $t ...
- mysql优化连接数
很多开发人员都会遇见”MySQL: ERROR 1040: Too many connections”的异常情况,造成这种情况的一种原因是访问量过高,MySQL服务器抗不住,这个时候就要考虑增加从服务 ...
- sqlserver批量导出存储过程、函数、视图
select text from syscomments s1 join sysobjects s2 on s1.id=s2.id where xtype = 'V' xtype V 视图 P ...
- Oracle to_date()函数的用法《转载》
to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明, 原文地址:http://database.51cto.com/art ...