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 ...
随机推荐
- Jmeter参数化(_csvread函数、CSV Data Set Config)
方法一.Jmeter自带的函数助手——_CSVRead函数 1.数据准备:先在excel存储数据,保存格式选择csv格式.或在记事本存储数据,列之间用英文逗号分隔,保存为txt 2.使用_csvrea ...
- C#解压、压缩高级用法
压缩:(可以吧要排除的文件去掉) /// <summary> /// 压缩文件夹 /// </summary> /// <param name="folder& ...
- OpenWrt 中查看 Flash RAM CPU 信息
OpenWrt 中查看 Flash RAM CPU 信息 来源 https://blog.csdn.net/mcusun2000/article/details/51130434 硬件: QCA95 ...
- Mycat分布式数据库架构解决方案--rule.xml详解
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 该文件 ...
- 【转载】C#中Add方法将往List集合末尾添加相应元素对象
在C#的List集合操作中,有时候需要将符合条件的对象添加到已有List集合中的末尾,此时就需要使用到List集合的Add方法,Add方法的作用为将对应的元素添加到List集合末尾,Add方法签名为v ...
- JavaScript之控制标签内容
function abb(a){ return document.getElementById(a); } console.log(abb('box').innerHTML); 标签.innerHTM ...
- Tomcat - 控制台乱码
1.找到${CATALINA_HOME}/conf/logging.properties 2.找到java.util.logging.ConsoleHandler.encoding = UTF-8 修 ...
- 安装License需要重启
"only commands for license handling are allowed in current state" Can you confirm if licen ...
- css设置图片百分比显示,最简洁的代码
css代码: .img-box { padding-bottom: 100%; } .img-box img { position: absolute; top:; bottom:; left:; r ...
- 微信小程序分享小程序码的生成,多参数以及参数的获取
如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 官方文档地址:https://developers.weixin.qq.com/minipro ...