洛谷P2704 炮兵阵地

时间:2021-07-14 08:24:53

本题过于经典......

对于这种网格状压DP,套路一波刷表法DFS转移就没了。

三进制状压,0表示当前,上一个都没有。1表示当前无,上一个有。2表示当前有。

转移的条件就是上一行为0,当前不是山地,且左边两个都不是2。

注意有个坑点,全部转移会超时。因为本题有很多废状态(山地),初始化-1然后判断是否转移即可。

 #include <cstdio>
#include <algorithm>
#include <cstring> const int N = , M = ; int n, m, f[N][], pre[M], now[M], ans, G[N][M];
char str[M]; inline int zip(int *a) {
int t = ;
for(int i = ; i < m; i++) {
t = t * + a[i];
}
return t;
} inline void unzip(int x, int *a) {
for(int i = m - ; i >= ; i--) {
a[i] = x % ;
x /= ;
}
return;
} void DFS(int x, int y, int lastans) {
if(y >= m) {
int s = zip(now);
f[x][s] = std::max(f[x][s], lastans);
ans = std::max(ans, lastans);
return;
}
DFS(x, y + , lastans);
if(!G[x][y] && pre[y] == && (y < || now[y - ] < ) && (y < || now[y - ] < )) {
now[y] = ;
DFS(x, y + , lastans + );
now[y] = ;
}
return;
} int main() {
memset(f, -, sizeof(f));
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) {
scanf("%s", str);
for(int j = ; j < m; j++) {
G[i][j] = (str[j] == 'H');
}
} int lm = ;
for(int i = ; i <= m; i++) {
lm *= ;
}
f[][] = ;
for(int i = ; i < n; i++) {
for(int s = ; s < lm; s++) {
if(f[i][s] == -) {
continue;
}
unzip(s, pre);
for(int j = ; j < m; j++) {
now[j] = std::max(, pre[j] - );
}
DFS(i + , , f[i][s]);
}
} printf("%d", ans);
return ;
}

AC代码

我数组一开始开了2^m个......应该是3^m。

洛谷P2704 炮兵阵地的更多相关文章

  1. 【题解】洛谷P2704 &lbrack;NOI2001&rsqb; 炮兵阵地(状压DP)

    洛谷P2704:https://www.luogu.org/problemnew/show/P2704 思路 这道题一开始以为是什么基于状压的高端算法 没想到只是一道加了一行状态判断的状压DP而已 与 ...

  2. &lbrack;洛谷P2704&rsqb; &lbrack;NOI2001&rsqb;炮兵阵地

    洛谷题目链接:[NOI2001]炮兵阵地 题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队.一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示), ...

  3. 【洛谷P2704【NOI2001】】炮兵阵地

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

  4. 洛谷P2704 &lbrack;NOI2001&rsqb;炮兵阵地 &lbrack;状压DP&rsqb;

    题目传送门 炮兵阵地 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图 ...

  5. C&plus;&plus; 洛谷 P2704 &lbrack;NOI2001&rsqb;炮兵阵地

    P2704 [NOI2001]炮兵阵地 没学状压DP的看一下 此题意思很简单,如下图,就是十字架上的不能有两个点放炮兵. 在做此题前,先做一下玉米田 玉米田题解 分析: 而m即一行的个数小于等于10, ...

  6. 关于三目运算符与if语句的效率与洛谷P2704题解

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

  7. 【洛谷P2704】炮兵阵地

    题目大意:定义一个炮兵会影响该点所在坐标上下左右两个格子的范围,求一个 N*M 的网格里最多可以放多少个炮兵. 题解:发现这个问题有需要记录两个状态,即:上一层的状态和上两层的状态,若直接进行记录,空 ...

  8. 洛谷 P2704 &lbrack;NOI2001&rsqb;炮兵阵地

    题意简述 给定一张地图,有山地H,平原P,平原可放置炮兵, 炮兵可以攻击沿横向左右各两格,沿纵向上下各两格的区域 求最多放几个炮兵,使他们两两攻击不到 题解思路 枚举第i层,第i - 1层,第i - ...

  9. 洛谷P2704 &lbrack;NOI2001&rsqb;炮兵阵地题解

    题目描述 司令部的将军们打算在\(N * M\)的网格地图上部署他们的炮兵部队.一个\(N * M\)的地图由N行M列组成,地图的每一格可能是山地(用\("H"\) 表示),也可能 ...

随机推荐

  1. Tomcat服务器本地的搭建,以及在 IDEA软件下的配置,以及项目的测试运行(基于supermvc框架下的web)

    一.声明 使用了基于springmvc的supermvc的web框架.实习公司的框架. 二.tomact的下载与安装 1选择适合自己电脑配置的jdk和jre版本(截图来自tomcat的官方网站http ...

  2. 使用js实现显示系统当前时间并实现倒计时功能并触发模态框(遮罩)功能

    常常在我们的网页中需要倒计时来触发一些函数,例如遮罩等,在本项目中,通过使用jquery,bootstrap,实现了显示系统当前时间,并且实现了倒计时的功能,倒计时实现后将会弹出模态框(遮罩层).模态 ...

  3. Microsoft AzureStorageAccount for Powershell

    使用Powershell 创建的存储账户,注意StorageAccountName只能使用小写字母以及数字, -Location参考http://www.cnblogs.com/SignalTips/ ...

  4. hdu&lowbar;5768&lowbar;Lucky7&lpar;中国剩余定理&plus;容斥&rpar;

    题目链接:hdu_5768_Lucky7 题意: 给你一个区间,问你这个区间内是7的倍数,并且满足%a[i]不等于w[i]的数的个数 乍一看以为是数位DP,仔细看看条件,发现要用中国剩余定理,然后容斥 ...

  5. web前端免费资源集

    web前端免费资源集 https://github.com/vhf/free-programming-books/blob/master/free-programming-books-zh.md

  6. OpenCV尝试

    我们来尝试,使用OpenCV来读入本地的一张图片,并使用库函数将其水平翻转.垂直翻转以及边缘提取,后将结果文件存入本地. 工具:VS2017  OpenCV4.0.1 怎么配置opencv/报错怎么办 ...

  7. Alpha阶段 - 博客链接合集

    Alpha阶段 - 博客链接合集 项目Github地址 安卓端(Stardust):https://github.com/StardustProject/Stardust 服务器端(Gravel):h ...

  8. 复习-css常用伪类别属性

    css常用伪类别属性 对<a>标签可制动态效果的css a:link:超链接的普通样式 a:visited:被点击过的超链接样式 a:hover:鼠标指针经过超链接上时的样式 a:acti ...

  9. mac系统如何在当前目录下打开终端

    给大家推荐一个好用的终端工具 Go2Shell:https://itunes.apple.com/cn/app/go2shell/id445770608?mt=12 在没有这个工具之前 找了好多在当前 ...

  10. 微信小程序生成二维码

    微信小程序客户端生成二维码的方法, 请参考这里: https://github.com/demi520/wxapp-qrcode  代码片段如下: const QR = require(". ...