noi.ac #43 dp计数
\(sol\)
状态
\]
表示到了第 \(i\) 层,其中 \(dis_{1}\) 表示第一根柱子剩下的最靠上的横木到当前 \(i\) 层的距离,以此类推。
显然后四维的范围 \([0, h]\)
枚举这一层所留下的横木是在哪一个梯子上,对应的 \(dis\) 变为 \(0\), 如果 \(dis\) 为 \(h\),说明已经断了,这种情况还是 \(h\), 其他的 \(dis + 1\) 如果已经是 \(h\) 则不变
时间复杂度 \(O(nh^4)\)
由于每一层必定会存在一个横木,也就是必定会有一个梯子 \(dis\) 为 \(0\)
所以了以减少以为的 \(dis\)
同时改为 \(0/1\) 记录这一个梯子是否能不断连接到当前行。
\]
表示到了 \(i\) 层,在这一层放横木的那个梯子是否能爬到当前层,\(dis\) 同理
时间复杂度 \(O(nh^3)\)
滚动数组优化空间
\(cod\)
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int mod = 1e9 + 9;
int n, h;
int now, old;
int f[2][2][33][33][33];
#define nex(x) ((x) == h ? h :(x) + 1)
void MOD(int &x) {
if (x >= mod) x -= mod;
}
int main() {
scanf("%d%d", &n, &h);
old = 0, now = 1;
f[old][1][0][0][0] = 1;
int tmp;
for (int i = 1; i <= n; i ++) {
for (int j = 0; j <= 1; j ++)
for (int x = 0; x <= h; x ++)
for (int y = 0; y <= h; y ++)
for (int z = 0; z <= h; z ++)
if (tmp = f[old][j][x][y][z]) {
MOD(f[now][j][nex(x)][nex(y)][nex(z)] += tmp);
MOD(f[now][x < h][nex(y)][nex(z)][j == 1 ? 1 : h] += tmp);
MOD(f[now][y < h][nex(x)][nex(z)][j == 1 ? 1 : h] += tmp);
MOD(f[now][z < h][nex(x)][nex(y)][j == 1 ? 1 : h] += tmp);
f[old][j][x][y][z] = 0;
}
swap(now, old);
}
int ans = 0;
for (int j = 0; j <= 1; j ++)
for (int x = 0; x <= h; x ++)
for (int y = 0; y <= h; y ++)
for (int z = 0; z <= h; z ++)
if (j == 1 || x < h || y < h || z < h)
ans += f[old][j][x][y][z], MOD(ans);
printf("%d", ans);
return 0;
}
noi.ac #43 dp计数的更多相关文章
- noi.ac #37 dp计数
#include<algorithm> #include<cstring> #include<cstdio> #include<iostream> ty ...
- [NOI.AC#31]MST 计数类DP
链接 注意到 \(n\) 只有40,爆搜一下发现40的整数拆分(相当于把 \(n\) 分成几个联通块)很少 因此可以枚举联通块状态来转移,这个状态直接用vector存起来,再用map映射,反正40也不 ...
- NOI.ac #31 MST DP、哈希
题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...
- NOI.AC #31 MST —— Kruskal+点集DP
题目:http://noi.ac/problem/31 好题啊! 题意很明白,对于有关最小生成树(MST)的题,一般是要模拟 Kruskal 过程了: 模拟 Kruskal,也就是把给出的 n-1 条 ...
- [NOI.AC 2018NOIP模拟赛 第三场 ] 染色 解题报告 (DP)
题目链接:http://noi.ac/contest/12/problem/37 题目: 小W收到了一张纸带,纸带上有 n个位置.现在他想把这个纸带染色,他一共有 m 种颜色,每个位置都可以染任意颜色 ...
- NOI.AC#2139-选择【斜率优化dp,树状数组】
正题 题目链接:http://noi.ac/problem/2139 题目大意 给出\(n\)个数字的序列\(a_i\).然后选出一个不降子序列最大化子序列的\(a_i\)和减去没有任何一个数被选中的 ...
- NOI.AC WC模拟赛
4C(容斥) http://noi.ac/contest/56/problem/25 同时交换一行或一列对答案显然没有影响,于是将行列均从大到小排序,每次处理限制相同的一段行列(呈一个L形). 问题变 ...
- NOI.AC 31 MST——整数划分相关的图论(生成树、哈希)
题目:http://noi.ac/problem/31 模拟 kruscal 的建最小生成树的过程,我们应该把树边一条一条加进去:在加下一条之前先把权值在这一条到下一条的之间的那些边都连上.连的时候要 ...
- HDU 4055 Number String(DP计数)
题意: 给你一个含n个字符的字符串,字符为'D'时表示小于号,字符为“I”时表示大于号,字符为“?”时表示大小于都可以.比如排列 {3, 1, 2, 7, 4, 6, 5} 表示为字符串 DIIDID ...
随机推荐
- Mybatis @Result注解的使用案例
@Result注解的使用
- Keyboard Purchase CodeForces - 1238E (状压)
大意: 给定串$s$, 字符集为字母表前$m$个字符, 求一个$m$排列$pos$, 使得$\sum\limits_{i=2}^n|{pos}_{s_{i-1}}-{pos}_{s_{i}}|$最小. ...
- 玩转Spring全家桶笔记 04 Spring的事务抽象、事务传播特性、编程式事务、申明式事务
1.Spring 的事务抽象 Spring提供了一致的事务模型 JDBC/Hibernate/Mybatis 操作数据 DataSource/JTA 事务 2.事务抽象的核心接口 PlatformTr ...
- java之struts2之数据检验
1.使用struts2时,有时候需要对数据进行相关的验证.如果对数据的要求比较严格,或对安全性要求比较高时,前端 js 验证还不够, 需要在后端再进行一次验证,保证数据的安全性. 2.struts2提 ...
- 【转载】C#中List集合使用Remove方法移除指定的对象
在C#的List集合操作中,有时候需要将特定的对象或者元素移除出List集合序列中,此时可使用到List集合的Remove方法,Remove方法的方法签名为bool Remove(T item),it ...
- 设置body样式问题
如果我给body设置成一个宽高为200px的正方形,背景为红色,但是整个html也变成了红色,而且是整个浏览器屏幕都是红的,怎么来处理,如下 给html单独设置一个背景颜色,比如为白色#fff,在给b ...
- Ajax + PHP 的用法以及遇见的问题
由于自己是个php小白,所以新知识点都要自己去不断的试验和摸索. 分享下自己用php + ajax交互的用法和问题. 前端代码: $.ajax({ type: "POST", da ...
- Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException
转自:https://www.jb51.net/article/98644.htm Java xml出现错误 javax.xml.transform.TransformerException: jav ...
- Step by Step to create orders by consuming SAP Commerce Cloud Restful API
Recently Jerry is working on an integration project about creating orders in Wechat platform by cons ...
- ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口
详见:https://blog.csdn.net/weixin_39148512/article/details/79234817 众所周知,在List集合中,我们经常会用到ArrayList以及Li ...