\(sol\)

状态

\[f_{i, dis_1, dis_2, dis_3, dis_4}
\]

表示到了第 \(i\) 层,其中 \(dis_{1}\) 表示第一根柱子剩下的最靠上的横木到当前 \(i\) 层的距离,以此类推。

显然后四维的范围 \([0, h]\)

枚举这一层所留下的横木是在哪一个梯子上,对应的 \(dis\) 变为 \(0\), 如果 \(dis\) 为 \(h\),说明已经断了,这种情况还是 \(h\), 其他的 \(dis + 1\) 如果已经是 \(h\) 则不变

时间复杂度 \(O(nh^4)\)

由于每一层必定会存在一个横木,也就是必定会有一个梯子 \(dis\) 为 \(0\)

所以了以减少以为的 \(dis\)

同时改为 \(0/1\) 记录这一个梯子是否能不断连接到当前行。

\[f_{i, 0/1, dis_{2}, dis_{3}, dis_{4}}
\]

表示到了 \(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计数的更多相关文章

  1. noi.ac #37 dp计数

    #include<algorithm> #include<cstring> #include<cstdio> #include<iostream> ty ...

  2. [NOI.AC#31]MST 计数类DP

    链接 注意到 \(n\) 只有40,爆搜一下发现40的整数拆分(相当于把 \(n\) 分成几个联通块)很少 因此可以枚举联通块状态来转移,这个状态直接用vector存起来,再用map映射,反正40也不 ...

  3. NOI.ac #31 MST DP、哈希

    题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...

  4. NOI.AC #31 MST —— Kruskal+点集DP

    题目:http://noi.ac/problem/31 好题啊! 题意很明白,对于有关最小生成树(MST)的题,一般是要模拟 Kruskal 过程了: 模拟 Kruskal,也就是把给出的 n-1 条 ...

  5. [NOI.AC 2018NOIP模拟赛 第三场 ] 染色 解题报告 (DP)

    题目链接:http://noi.ac/contest/12/problem/37 题目: 小W收到了一张纸带,纸带上有 n个位置.现在他想把这个纸带染色,他一共有 m 种颜色,每个位置都可以染任意颜色 ...

  6. NOI.AC#2139-选择【斜率优化dp,树状数组】

    正题 题目链接:http://noi.ac/problem/2139 题目大意 给出\(n\)个数字的序列\(a_i\).然后选出一个不降子序列最大化子序列的\(a_i\)和减去没有任何一个数被选中的 ...

  7. NOI.AC WC模拟赛

    4C(容斥) http://noi.ac/contest/56/problem/25 同时交换一行或一列对答案显然没有影响,于是将行列均从大到小排序,每次处理限制相同的一段行列(呈一个L形). 问题变 ...

  8. NOI.AC 31 MST——整数划分相关的图论(生成树、哈希)

    题目:http://noi.ac/problem/31 模拟 kruscal 的建最小生成树的过程,我们应该把树边一条一条加进去:在加下一条之前先把权值在这一条到下一条的之间的那些边都连上.连的时候要 ...

  9. HDU 4055 Number String(DP计数)

    题意: 给你一个含n个字符的字符串,字符为'D'时表示小于号,字符为“I”时表示大于号,字符为“?”时表示大小于都可以.比如排列 {3, 1, 2, 7, 4, 6, 5} 表示为字符串 DIIDID ...

随机推荐

  1. Qt 中的二进制兼容策略(简而言之就是地址不能变,剩下的就是让地址不变的技巧)

    本文翻译自 Policies/Binary Compatibility Issues With C++ 二进制兼容的定义 如果程序从一个以前版本的库动态链接到新版本的库之后,能够继续正常运行,而不需要 ...

  2. [LOJ2065] [SDOI2016]模式字符串

    题目链接 洛谷:https://www.luogu.org/problemnew/show/P4075 LOJ:https://loj.ac/problem/2065 Solution 这种题看起来就 ...

  3. UOJ343 清华集训2017 避难所 构造、打表

    传送门 玄学题 考虑构造三个数\(p_1p_2,p_1p_2,p_1p_2\)满足贪心分解会分解为\(p_1^3,p_2,p_2,p_2\),那么需要满足条件 1.\(p_1 , p_2 \in Pr ...

  4. 【洛谷 P4254】 [JSOI2008]Blue Mary开公司(李超线段树)

    题目链接 其实这东西很好懂的..用来维护一次函数. 每个结点存一个值,表示x=这个区间的mid时值最大的函数的编号. 把插入线段的斜率和当前结点的斜率和大小比较来更新左右儿子的值. 查询是实际上是查询 ...

  5. javascript设计模式之适配器模式

    ---恢复内容开始--- 定义: 是指讲一个接口转换成客户端希望 的另外一个接口,该模式使得原本不兼容的类可以一起工作.适配器模式的作用事解决两个软件实体间的接口不兼容的问题. 生活中的实例: USB ...

  6. C++之同名覆盖、多态

    一.同名覆盖引发的问题 父子间的赋值兼容--子类对象可以当作父类对象使用(兼容性) 1.子类对象可以直接赋值给父类对象 2.子类对象可以直接初始化父类对象 3.父类指针可以指向子类对象 4.父类引用可 ...

  7. UCOS内存管理

    STM32F10xxx内置64K字节的静态SRAM.它可以以字节.半字(16位)或全字(32位)访问 SRAM的起始地址是0x20000000 UCOSII //定义存储区 OS_MEM *DATA_ ...

  8. iptables详细介绍

    iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火 ...

  9. 美化shell

    Linux终端提示符颜色美化: (一)大致步骤:vim ~/.bashrc中设置PS1的值.保存后执行生效:source ~/.bashrc (二)PS1的值推荐:推荐1多色显示:用户白色:全路径(\ ...

  10. redis 异常 MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk

    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. 解决方 ...