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: 16310 Accepted: 6212

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

Noi 01

#include<cstdio>
#include<cstring>
#include<iostream>

using namespace std;

int N,M;
int C[1<<10];
int Map[110],num[110][1000],dp[2][1<<10][1<<10];
char ch[110];

void fun()
{
	int cnt,tmp=1<<10,num;
	for(int i=0;i<tmp;i++)
	{
		num=i;	cnt=0;
		while(num)
		{
			if(num&1)
				cnt++;
			num>>=1;
		}
		C[i]=cnt;
	}
}

void DFS(int flag,int x,int pos)
{
	if(pos==M)
	{
		num[flag][++num[flag][0]]=x;
		return ;
	}
	DFS(flag,x,pos+1);
	if(Map[flag]&(1<<pos))
	{
		if( x&(1<<(pos-1)) ) return ;
		if(pos>1 && x&(1<<(pos-2)) )	return ;
		DFS(flag,x|(1<<pos),pos+1);
	}
}

int main()
{
	int i,j,k,h,ans,cur;
	fun();
	while(scanf("%d%d",&N,&M)==2)
	{
		for(i=0;i<N;i++)
		{
			scanf("%s",ch);
			Map[i]=0;
			for(j=0;j<M;j++)
				if(ch[j]=='P')
					Map[i]|=1<<j;
			memset(num[i],0,sizeof(num[i]));
			DFS(i,0,0);
			if(Map[i]&1)
				DFS(i,1,1);
		}

		if(N==1)
		{
			ans=0;
			for(j=1;j<=num[0][0];j++)		ans=max(C[num[0][j]],ans);

			printf("%d\n",ans);
			continue;
		}
		cur=0;	memset(dp[cur],0,sizeof(dp[cur]));
		for(j=1;j<=num[1][0];j++)
			for(k=1;k<=num[0][0];k++)
			{
				if(num[1][j]&num[0][k])
					continue;
				dp[cur][num[1][j]][num[0][k]]=C[num[1][j]]+C[num[0][k]];
			}
		for(i=2;i<N;i++)
		{
			cur^=1;		memset(dp[cur],0,sizeof(dp[cur]));
			for(j=1;j<=num[i][0];j++)
				for(k=1;k<=num[i-1][0];k++)
				{
					dp[cur][num[i][j]][num[i-1][k]]=C[num[i][j]]+C[num[i-1][k]];
					if(num[i][j]&num[i-1][k])
						continue;
					for(h=1;h<=num[i-2][0];h++)
					{
						if(num[i][j]&num[i-2][h] || num[i-1][k]&num[i-2][h])
							continue;
						dp[cur][num[i][j]][num[i-1][k]]=max(dp[cur][num[i][j]][num[i-1][k]],dp[cur^1][num[i-1][k]][num[i-2][h]]+C[num[i][j]]);
					}
				}
		}
		ans=0;
		for(j=1;j<=num[N-1][0];j++)
			for(k=1;k<=num[N-2][0];k++)
			{
				ans=max(ans,dp[cur][num[N-1][j]][num[N-2][k]]);
			}
		printf("%d\n",ans);
	}

	return 0;
}


m3u8直播视频源【直播】 两年前比较多的人在用的直播源,最近翻看发现还能上线,做解析的朋友可以拿去研究一下。希望能做点好的平台出来。 立即下载

相关推荐

如何实现MCGS与S7-200SMART PLC以太网多台通信控制?

第九步:(设备工具箱—设备管理—鼠标依次点击通用TCP/IP父设备—西门子_ Smart200到设备窗口里面去)数据类型:第0位(指PLC地址变量小数点后面的位数,例如我地址是M0.0,那么在数据类型应填写通道的第00位)第十步:(鼠标双击打开通用TCPIP父设备0--[通用TCP/IP父设备]进入通信配置)通道地址:0(指小数点前面起始字节的地址,例如我地址是M0.0,那么应在通道地填写0)。第七步:(选择通用TCP/IP父设备,点击新增,右侧选定设备就会自动添加进去。

u010670857的博客 6716

炮兵阵地

#include &lt;iostream&gt; #include &lt;cstdio&gt; using namespace std; inline int read() { int x=0,f=1; char c=getchar(); while(c&lt;'0'||c&gt;'9') { if(c=='-') f=-1; c=getchar(); } while(...

VIP专属博客通道 3564

uniapp - 微信小程序接入官方人脸识别认证详细流程及示例源码,Uniapp微信小程序项目集成官方提供的人脸识别身份验证插件接口(多种示例:人脸核验、身份证件与人脸是否匹配、是否活体、实名认证等)

uni-app微信小程序人脸识别认证,使用uniapp开发微信小程序的人脸采集功能/人脸识别功能,uniapp vue3微信小程序活体人脸识别,Uni-app微信小程序实名认证,uniApp微信小程序人脸认证,UniApp的微信小程序实名认证与人脸识别系统开发,人脸核身微信小程序uni-app接入流程,wx.startFacialRecognitionVerify,uniapp开发微信小程序-人脸采集功能、微信人脸识别实名认证集成指南,识别失败,人脸识别接口怎么调用,前后端完整示例代码demo,人脸检测功能

🏆 前端领域优质创作者 3281

【动态规划】炮兵阵地

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

void* ptr = &OI; 1084

Matplotlib之bar3d画3D柱状图

3D柱状图通常用于展示数据集中不同分类项的数据大小或数量。与普通的柱状图相比,3D柱状图更适合展示数据的三个维度 3D 柱状图 按行/列涂颜色 柱加阴影、描黑边 自定义座标轴名、刻度标签、范围

我走的每一步都算数 1121

论文必备 - YOLOv11热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv11热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 5504

NOI2001 炮兵阵地

状压金典 //////// dp[i][j][k]表示第i行状态为j,且上一行状态为k的最多放置的炮兵数 优化1:预处理出每行的可能状态 具体看程序了!!! AC代码: #include&lt;cstdio&gt; #include&lt;iostream&gt; #include&lt;cstring&gt; #define N 107 #define M 1024 using namesp...

Wangxinyuan666的博客 1万+

YOLOv8/YOLOv11目标检测系统与多目标跟踪检测系统,使用PySide6搭建目标检测系统,支持目标检测、分割、姿势估计、旋转框,用户端系统+后台管理系统可用于大论文凑工作量或毕设必备

YOLOv8/YOLOv11目标检测系统与多目标跟踪检测系统,目标检测、分割、姿势估计、obb(旋转框),用户端系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程,系统支持 目标检测、分割、姿势估计、obb(旋转框)等模型进来检测,是一个通用的目标跟踪与目标检测系统,适配多种场景如:鱼苗检测与跟踪、行人多目标跟踪、车辆多目标跟踪、牛只行为识别与跟踪、口罩佩戴检测、安全帽佩戴检测、火灾检测等。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

刷题集--炮兵阵地

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

caoyang1123的博客 288

【DRAM存储器五十六】LPDDR5介绍--WCK2CK Leveling和Read gate training

简述LPDDR5 WCK2CK leveling和read gate traning基本原理与操作步骤

highman110的博客 8789

基于STM32的设计智慧超市管理系统(带收银系统+物联网环境监测)_167

本系统主要由超市环境监测部分和商品管理部分组成。环境监测部分主控芯片采用STM32F103C8T6,主要包括温湿度传感器、烟雾传感器和空调制热开关、空调制冷开关,采集的数据通过ESP8266模块+MQTT协议上传至OneNet云平台,在OneNet云平台设计手机和电脑版本可视化页面,能够在页面上查看超市的环境信息,还能在页面上手动打开空调制热开关和空调制冷开关。商品管理部分主要由RC522-RFID读卡器、上位机组成,实现商品选购、结算、顾客的VIP会员卡注册管理等功能。

6069

poj1185

炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11808 Accepted: 4266 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(

volz.kz.g 630

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

poj 1185 炮兵阵地

poj 1185 炮兵阵地 刚刚学习状态压缩,看到这样的问题真的有些不知所措 所以看了大神的题解,得到了这种题的解题思路 这个题的状态就是每一行的炮兵阵地摆放不能相邻,或者仅隔一个位置 找出每一行的状态数最多是sum=60个左右(当列数为10时) 每一行的状态都受起那两行的状态影响,所以不难得出算法的时间复杂度为n*sum^3 /** 初学状态压缩 题目:poj 1185 炮兵阵地 解

mitic的博客 547

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

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

Sirius_han的博客 442

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

qq_42911793的博客 264

POJ 1185 炮兵阵地 状压dp

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

weixin_44273380的博客 226

poj1185炮兵阵地【状压dp】

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

lh的博客 457

[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
上一篇: CSU 1317 Find the max Link
下一篇: POJ 2411 Mondriaan's Dream
Magic_____
博客等级 码龄14年 11粉丝 160原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值