poj 1185 炮兵阵地

POJ 1185 炮兵阵地 (经典状态压缩题) 炮兵阵地(POJ 1185) Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 30481 Accepted: 11762 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用”H” 表示),也可能是平原(用”P... 阅读详情


炮兵阵地
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 26353 Accepted: 10159

Description

司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 

如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。 
现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。 

Input

第一行包含两个由空格分割开的正整数,分别表示N和M; 
接下来的N行,每一行含有连续的M个字符('P'或者'H'),中间没有空格。按顺序表示地图中每一行的数据。N <= 100;M <= 10。

Output

仅一行,包含一个整数K,表示最多能摆放的炮兵部队的数量。

Sample Input

5 4
PHPP
PPHH
PPPP
PHPP
PHHP

Sample Output

6

Source

[Submit]   [Go Back]   [Status]   [Discuss]

Home Page   Go Back  To top

中文题就不解释了。

思路:这道据说是经典的状压dp,做起来的时候感觉难度有点偏高,一开始我想用轮廓线dp的思维记录前两行的全部状态然后dp过去,结果tle了一发,然后看了下别人的思路,也就大概懂了,思路大概就是用dp[i][j][k]表示第i行状态为j第i-1行状态为k的最大值。至于第一维可用0 1滚动优化内存,然后每一行的状态最多肯定不超100种,因为相邻2~3位是不能同时存在的,然后就是每次计算都把所有可能的状态枚举出来,用一个数组保存。然后就一行一行dp过去,最后再寻找最大值为答案。下面给代码:

#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<bitset>
#include <utility>
using namespace std;
#define maxn 105
typedef long long LL;
const int mod = 1e9 + 7;
int dp[2][maxn][maxn];
int base[maxn], status[maxn], num[maxn];
char s[maxn][15];
int main(){
	int n, m;
	while (~scanf("%d%d", &n, &m)){
		for (int i = 1; i <= n; i++){
			status[i] = 0;
			scanf("%s", s[i] + 1);
			for (int j = 1; j <= m; j++){
				if (s[i][j] == 'H')
					base[i] |= 1 << (j - 1);
			}
		}
		memset(dp, 0, sizeof(dp));
		int len = 0;
		for (int i = 0; i < (1 << m); i++){
			if ((i&(i << 1)) || (i&(i << 2)))
				continue;
			int temp = i;
			while (temp){
				num[len] += temp & 1;
				temp >>= 1;
			}
			status[len++] = i;
		}
		int now = 1;
		for (int i = 0; i < len; i++){	
			if (status[i] & base[1])
				continue;
			dp[1][i][0] = num[i];
		}
		if (n > 1){
			now ^= 1;
			for (int i = 0; i < len; i++){
				if (status[i] & base[2])
					continue;
				for (int j = 0; j < len; j++){
					if ((status[j] & base[1]) || (status[i] & status[j]))
						continue;
					dp[0][i][j] = max(dp[0][i][j], dp[1][j][0] + num[i]);
				}
			}
			for (int i = 3; i <= n; i++){
				now ^= 1;
				memset(dp[now], 0, sizeof(dp[now]));
				for (int j = 0; j < len; j++){
					if (status[j] & base[i])
						continue;
					for (int k = 0; k < len; k++){
						if ((status[k] & base[i - 1]) || (status[j] & status[k]))
							continue;
						for (int l = 0; l < len; l++){
							if ((status[l] & base[i - 2]) || (status[k] & status[l]) || (status[j] & status[l]))
								continue;
							dp[now][j][k] = max(dp[now][j][k], dp[now ^ 1][k][l] + num[j]);
						}
					}
				}
			}
		}
		int ans = 0;
		for (int i = 0; i < len; i++){
			for (int j = 0; j < len; j++){
				ans = max(ans, dp[now][i][j]);
			}
		}
		printf("%d\n", ans);
	}
}


【keras】走近VGG16卷积神经网络         VGG16是一个16层的卷积神经网络模型,输入数据的维度为224*224*3,即长宽均为224像素的RGB彩色图片,VGG16模型的权重由ImageNet训练而来。由于其具有简单实用的优点,因此,在图像分类和目标检测任务中得到了较为广泛的应用。 1.卷积神经网络的基本概念 1.1卷积         简单的将其理解为一种数学运算,具体的计算过程如下图所示:       ... 阅读详情

相关推荐

Python语言在工业控制中的简单应用

在工业控制中,经常需要对采集到的数据进行分析和处理,Python的这些库可以简化这一过程。传统的工业控制系统多依赖于专用的控制硬件和软件,但随着技术的发展,开放性和灵活性成为了新的需求焦点。还有,Python社区活跃,提供了大量的开源代码和模块,这对于工业控制领域来说是一个巨大的资产。Python作为一种高级编程语言,因其简洁的语法、强大的库支持和广泛的社区资源而在工业界获得了快速的发展和广泛的应用。在工业控制领域,Python的应用日益增多,这得益于其跨平台性、脚本语言的灵活性以及与硬件设备交互的能力。

2303_78014702的博客 1721

Acwing.提高课.炮兵阵地(c++题解)

司令部的将军们打算在 N×M 的网格地图上部署他们的炮兵部队。一个 N×M 的地图由 N 行 M 列组成,地图的每一格可能是山地(用H表示),也可能是平原(用P表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。

hb_zhyu的博客 703

[软考]系统架构设计师 备考经验分享(一) - 备考计划篇

前言 上周末刚刚结束了软考架构师的考试,自我感觉考的还可以,大概率是过了。 两次参加软考,一次中级嵌入式,一次高级架构师,都是备考不到两个月时间,尤其是架构师这次考试内容和本职工作有不小的差别,并且需要同时备考三个科目,在高强度地备考中感觉是摸索出到了一点软考的技巧与经验。 打算趁还记得,赶紧写几篇文章做下梳理总结,算是给将来自己考系分、高项或者其他考试做个记录,也希望能够帮到正在备考的大家。 先把第一步,个人的备考计划分享给大家。 自身情况分析 首先,请大家一定先明确三个问题,这三个问题会直接影响到你的

_ 6404

***POJ1185 炮兵阵地 ACM解题报告(状压dp入门题)

这题是个入门的状压dp(虽然对我来说好难啊,坑了一下午终于过了。。。)难得一个中文题,还这么难 注意点挺多的,首先是要开数组记录所有情况,然后记录每种情况的炮兵数,很多处理类似于前一题3254,可以参考,不过这题更难一点,因为需要考虑两行。 所以得开个三维数组记录情况,d[i][j][k],i是当前行数,j是第i行的情况,k是i-1行的情况。 状态转移方程:d[i][j][k]=max(d[

Miracle_ma的专栏 1311

嵌入式Linux Qt/QML开发实战:从Buildroot配置到应用部署

本文详细介绍了嵌入式Linux Qt/QML开发全流程,从Buildroot系统配置、交叉编译工具链搭建到应用部署与调试。以RK3506开发板为例,提供实战指南,帮助开发者高效完成嵌入式应用开发,解决常见环境配置与性能优化问题。

m2n3o4p5的博客 224

【Network Management】AUTOSAR局部网络管理从0到1配置实践

AUTOSAR局部网络管理从0到1配置实践

qq_36056498的博客 2914

炮兵阵地 POJ - 1185 (状压dp)

司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用”H” 表示),也可能是平原(用”P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右

退役的铜牌狗 378

YOLOv12涨点优化:自研检测头 | 独家创新(Partial_C_v12Detect)检测头结构创新,实现涨点

现有12Detect进行二次创新,提升检测精度,独家创新(Partial_C_12Detect)检测头结构创新,适合科研创新度十足,强烈推荐

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 631

poj1185 炮兵阵地

Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支...

weixin_30682127的博客 199

可信启动方案设计

本博客简要解释了TF-A中的Measured-Boot可信启动设计实现。

AI-安全-功耗 1203

基于YOLOv8的野生菌菇检测、识别与分类系统

YOLOv8是YOLO系列模型的最新版本,继承了YOLO系列高效、精确的特点。YOLOv8采用了新的网络架构,并优化了推理速度和检测精度。与传统的目标检测算法(如Faster R-CNN)不同,YOLO模型通过一次前向传播同时完成目标定位与分类,因而具有非常高的计算效率。

YOLO 1284

poj 1185

<br /> 炮兵阵地Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 9240 Accepted: 3270<br />Description司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: <br

志当存高远 1027

DeepLabv3+改进68:全网首发-添加DBlock模块 |高效且鲁棒的多任务低光图像修复神经网络

本文提出了一种高效鲁棒的多任务低光图像修复神经网络DarkIR,针对夜间或昏暗条件下图像存在的噪点、光线不足和模糊问题。不同于现有方法分别处理去模糊和低光增强任务,该模型采用新的注意力机制增强CNN感受野,在降低计算成本的同时,在LOL-Blur、LOLv2和Real-LOLBlur数据集上取得最优结果,并能良好泛化到真实夜间图像。

AIcurator的博客 325

POJ 1185 炮兵阵地

POJ 1185 炮兵阵地 题目链接 Description 司令部的将军们打算在 N∗MN*MN∗M 的网格地图上部署他们的炮兵部队。一个 N∗MN*MN∗M 的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各

旺崽的博客 2762

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

炮兵阵地 POJ - 1185(状压DP)

G - 炮兵阵地 题目链接:POJ - 1185POJ-3254的升级版;题意:N*M的地图标有H,G, H不能建炮兵阵地, P可以,炮兵阵地之间至少要间距两个格子(POJ-3254是不能相邻);若用1表示有炮兵阵地, 0表示无, 则1001...

Sirius_han的博客 442

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ1185炮兵阵地(状压dp)

POJ1185炮兵阵地(状压dp) 学了两周的状压dp,终于把这道题a了… 参考的这篇大佬的博客学习的状压 点这里 题意: 给一个N X M的地图,其中P代表平原能放一个炮兵,H代表一个山不能放炮兵,每个炮兵可以打到上下左右相距为2的距离。问在炮兵互不伤害的情况下地图上最多能放多少个炮兵。(N &lt;= 100,M &lt;= 10) 思路: 看到数据范围和显然这是一道状压dp的题目,首先我们把...

qq_42911793的博客 264

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【状态dp】poj 1185 炮兵阵地(三维dp)

poj 1185 炮兵阵地http://poj.org/problem?id=1185问题描述:给你一个n行m列的P-H矩阵,H表示不能安置炮兵,1可以安置炮兵,要求炮兵攻击管辖内不能在安置其他炮兵,问最多可安置炮兵的数目思路: 状态压缩+位运算+动态规划基本思路参考上一题http://blog.youkuaiyun.com/u012717411/article/details/488967911.注意与

Hacker_vision 1032

poj1185炮兵阵地【状压dp】

poj1185炮兵阵地 题意: n*m的地图(n<=100, m<=10),有H山地、P平原两种地形,平原上可以部署炮兵。炮兵伤害范围为横竖范围2格并且无视地形,问在保证互不伤害的情况下最多部署几个炮兵。老套路按行转移,炮兵伤害2格,当前行会受到前两行的影响,因此要用到三维,但三维时间空间都炸了。 考虑到炮兵互不伤害,2102^{10}中有很多非法状态,没必要开这么大,预处理出一行的

lh的博客 457

POJ 1185 炮兵阵地 状压dp

题目链接:POJ 1185 炮兵阵地 题目 Description 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队。一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮...

weixin_44273380的博客 226

[poj1185]炮兵阵地_状压dp

炮兵阵地 poj-1185     题目大意:给出n列m行,在其中添加炮兵,问最多能加的炮兵数。     注释:n<=100,m<=10。然后只能在平原的地方建立炮兵。       想法:第2到状压dp,++。这题显然是很经典的。设状态dp[i][j][k]表示第i行的状态为j,i-1行的状态为k的最多炮兵数。在转移时,枚举所有的合法炮兵排列(此处的合法数目是根据一行全...

dianan0938的博客 162

【简●解】POJ 1185,LG P2704【炮兵阵地】

POJ 1185,LG P2704【炮兵阵地】 状压经典入门。 【传送门】 POJ 1185 洛谷 P2704 【题目大意】 司令部的将军们打算在 \(N\times M\) 的网格地图上部署他们的炮兵部队。一个 \(N\times M\) 的地图由 \(N\) 行 \(M\) 列组成,地图的每一格可能是山地(用 H 表示),也可能是平原(用 P 表示),如下图。在每一格平原地形上最多可以布...

weixin_30527551的博客 95

[POJ1185]炮兵阵地

[POJ1185]炮兵阵地 试题描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则...

weixin_30915275的博客 113

poj 1185 炮兵阵地 【状态压缩dp】

原题链接 poj 1185 炮兵阵地        由于每行只有十个可以考虑用状态压缩,又由于每行两炮之间不能小于2,故可以先计算出,最多不会超过60种 状态,可以先存下这些状态(f[]),然后存下每种状态的炮阵地数量(num[]),用dp[][][];  状态转移公式 dp[i][j][k]=num[j]+max(dp[i-1][k][t])(其中j与k相符,j与t也要相符) (ps:相符

smallfish的专栏 515
上一篇: hdu 4507 吉哥系列故事——恨7不成妻
下一篇: hdu 3254 Corn Fields
overload1997
博客等级 码龄11年 328粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值