【BZOJ 1925】【SDOI 2010】地精部落
代码短的惨绝人寰,思维复杂度高的惨绝人寰。
首先很容易抽象出模型,求长度为n的抖动子序列个数,然后我们开始蛋疼。
状态 f[i][j]表示以j开头的长度为i的,并且第一位是下降的抖动子序列个数。显然的是,实际上的答案是个数*2,因为这样并没有算上第一位是上升的。
状态转移方程:
(1)首先我们考虑开头为j-1的抖动子序列个数,显然这样的个数为f[i][j-1];
(2)然后我们考虑开头为j的抖动子序列个数,那么我们就要求第二位x一定要比j小,即x=j-1,但显然这样的序列第一位上升,我们需要把它翻转过来,j-1就变成了(i-1)-(j-1)+1=i-j+1,这样的答案就是f[i-1][i-j+1]。
f[i][j]=f[i][j-1]+f[i-1][i-j+1]
初始化 f[2][2]=1;
蛋疼结束了么?远远没有,答案其实是f[n+1][n+1]*2,因为只有这样才能使第一位放小于n+1的[1,n]。同时必须使用滚动数组,否则MLE;code:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,p,f[2][5001];
int main()
{int ans,i,j,x;scanf("%d%d",&n,&p);f[0][2]=1;for (i=3;i<=n+1;++i){x=i&1;for (j=1;j<=i;++j)f[x][j]=(f[!x][i-j+1]+f[x][j-1])%p;}ans=(f[x][n+1]*2)%p;printf("%d\n",ans);
}
然而我们在很多神犇的博客里看到的题解是这样的(by hzwer学长)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define ll long long
#define inf 1000000000
using namespace std;
inline ll read()
{ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
int n,p;
int f[2][4505];
int main()
{n=read();p=read();f[1][1]=1;for(int i=2;i<=n;i++)for(int j=1;j<=n;j++){int x=i&1;f[x][j]=f[x][j-1]+f[x^1][i-j];f[x][j]%=p;}printf("%d",n==1?1%p:f[n&1][n]*2%p);return 0;
}
其实道理也很简单,黄学长把所有的i都向左平移了一位。。。
【BZOJ 1925】【SDOI 2010】地精部落相关推荐
- 1925: [Sdoi2010]地精部落
1925: [Sdoi2010]地精部落 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1196 Solved: 730 [ Submit][ ...
- [Sdoi2010] 地精部落
F. 地精部落 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi ...
- bzoj1925【sdoi2010】地精部落
1925: [Sdoi2010]地精部落 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 797 Solved: 487 [ Submit][ S ...
- [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)
[BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关 ...
- [BZOJ1925]地精部落
地精部落 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精.地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个独一无二的高度Hi,其中Hi是1到N之间 ...
- P2467 [SDOI2010]地精部落
P2467 [SDOI2010]地精部落 题意: 有n个山脉高度分别是1到n,现在让你按照山峰山谷的顺序依次摆放(第一个可以是山峰也可以是山谷),问有多少方案(答案mod p) 题解: dp,但是自己 ...
- BZOJ1925: [Sdoi2010]地精部落
BZOJ1925: [Sdoi2010]地精部落 Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中. 具体地说,一座长度为 N 的山脉 H可分 为 ...
- DP [Sdoi2010]地精部落
问题 H: [Sdoi2010]地精部落 时间限制: 1 Sec 内存限制: 64 MB 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 ...
- [luogu2467 SDOI2010] 地精部落
[luogu2467 SDOI2010] 地精部落 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有 ...
最新文章
- 昨天在公司加班,上午好像就是弄一个ftp的linux服务问题
- 搞笑向, 面向IE8的webworker-ployfill
- 线上日志分析与其他一些脚本
- APK反编译得工具总结(转载)
- openssl 添加自定义算法_GitHub:用PyTorch实现17种深度强化学习算法
- python 颜色_Python可视化|matplotlib07自带颜色条Colormap(三)
- 网盘中搭建git服务
- 抽象工厂模式_设计模式(3) 抽象工厂模式
- PostgreSQL概述
- java nio 多路复用_JAVA NIO 一步步构建I/O多路复用的请求模型
- python 服务发现_什么是服务发现?
- 批量自动下单(京东)
- Uniapp进行APP打包——iOS 系统
- react做h5 例子_从零搭建 React 开发 H5 模板
- java微信支付 openid_微信公众号支付(一)如何获取用户openId
- RapidMiner遇到的问题
- python--贝壳租房爬虫及数据可视化
- win10 wifi图标不见了 修复办法
- android手机的根目录,安卓根目录详解
- 常见计算机病毒种类及特征介绍与分析