NOI2001 炮兵阵地

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

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

显然状压,设f[i][T]为第i行时T状态的方案,那么我们得到一个转移方程:f[i][T]=max{f[i-2][S]+num[S']+num[T]}(S',S,T相互兼容)

一开始天真的我是这么想的,然后只拿了2、3个点的分,让我们考虑一下这个方程的问题?

如上图,依照这种方式转移,我们会更新到实际上是冲突,但是我们并不能发现的问题,因此Ans'会大于Ans。

如何避免这种冲突决策?我们设f[i][j][k],是的,多开一维,表示第i行时i行状态为j且i-1行状态为k的最优决策,因此,状态转移方程:f[i][j][k]=max{f[i-1][k][l]+num[j]},那么这个方程有没有什么问题呢?因为f[i][j][k]保证了i行在状态j是不和状态k和l冲突,而我们又是递推下来的,因此不会有影响= =(感性理解一下?)

#include<bits/stdc++.h>
using namespace std;
const int Maxn=233;
int n,m,tot,ans,s[Maxn];
int cnt,sta[Maxn],num[Maxn],f[Maxn][Maxn][Maxn];
bool check(int s){
	return !((s&(s>>1))||(s&(s>>2))||(s&(s<<1))||(s&(s<<2)));
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)
		for(int j=0;j<m;++j){
			char c=getchar();while(!isalpha(c))c=getchar();
			s[i]|=(c=='P')<<j;
		}
		
	tot=(1<<m)-1;
	for(int i=0;i<=tot;++i)
		if(check(i))sta[++cnt]=i,num[cnt]=__builtin_popcount(i);
	
	for(int i=1;i<=cnt;++i){
		if((s[2]|sta[i])!=s[2])continue;
		for(int j=1;j<=cnt;++j){
			if((s[1]|sta[j])!=s[1]||(sta[i]&sta[j]))continue;
			f[2][i][j]=num[i]+num[j];
			ans=max(ans,f[2][i][j]);
		}
	}
	for(int i=3;i<=n;++i)
		for(int j=1;j<=cnt;++j){
			if((s[i]|sta[j])!=s[i])continue;
			for(int k=1;k<=cnt;++k){
				if(((s[i-1]|sta[k])!=s[i-1])||(sta[j]&sta[k]))continue;
				for(int l=1;l<=cnt;++l){
					if(((s[i-2]|sta[l])!=s[i-2])||(sta[j]&sta[l])||(sta[k]&sta[l]))continue;
					f[i][j][k]=max(f[i][j][k],f[i-1][k][l]+num[j]);
				}
				ans=max(ans,f[i][j][k]);
			}
		}
	cout<<ans<<endl;
	return 0;
}

 

QGis二次开发 —— 5.1、基于qgis开发雷达扫描、无人机飞行跟踪等(附:源码及工程) 基于qgis开发雷达扫描、无人机飞行跟踪等 阅读详情

相关推荐

cuda2 but found one of them on device cuda 0

cuda2 but found one of them on device cuda 0 上面问题的重点是,不是cpu和gpu之间的常规问题,而是出现在不同gpu之间的数据。 出问题地方: model = nn.DataParallel(model, device_ids=[2,4]) 先说解决方法: 方案一: model = nn.DataParallel(model, device_ids=[0,2,4]) 前面一定要给一个0的序号,如果0被别人占了呢? 方案二: os.environ["CUDA_

binqiang2wang 664

BZOJ 1087: [SCOI2005]互不侵犯King 预处理,状压DP

Description  在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子。 Input  只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) Output  方案数。 Sample Input 3 2 Sample Output 16 解题思路:

I good vegetable a! 594

RK3568 NFS rootfs配置与调试实战指南(已验证)

本文提供了在RK3568开发板上配置NFS rootfs的完整实战指南。通过详细步骤讲解如何配置uboot的bootargs参数、编译支持NFS的内核,并在PC端搭建TFTP与NFS服务器,最终实现从网络挂载根文件系统,从而极大提升驱动调试和应用程序开发的迭代效率。

weixin_29175469的博客 281

炮兵阵地图文详解NOI2001/POJ1185(状态压缩)

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

hwdn3000的博客 1652

ChromeOS安装教程

ChromeOS,是基于Linux内核研发的ChromiumOS开源系统的闭源系统,最大的特色就是内置了Chrome浏览器,早期主要以Web云端应用程序为主,后来逐渐引入了Android子系统和Linux子系统。本文主要简述摸索的家用笔记本安装ChromeOS安装方法,供各位玩机朋友参考。

weixin_45751495的博客 8112

自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应

自绘CListCtrl时发现ON_WM_MEASUREITEM_REFLECT和DrawItem(LPDRAWITEMSTRUCT lpMeasureItemStruct) 无响应 一般情况下,我们都是在 dialog 里面 放一个 list 控件,然后 用自己的类绑定自己的自绘对象,如同下面: 1.  在 dialog 里面 加一个 list 列表 2. 然后 绑定这个列表 哈哈...

mfreesky的专栏 2169

【POJ 1185】炮兵阵地(状压DP)

【POJ 1185】炮兵阵地(状压DP) Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 23107   Accepted: 8957 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格

ACMer' 1877

CentOS 7下glibc升级到2.28的保姆级避坑指南(含GCC 7.3.1编译配置)

本文详细介绍了在CentOS 7系统中将glibc升级到2.28版本的完整流程,包括GCC 7.3.1的编译配置、环境变量设置、glibc编译的细节处理以及生产环境验证。文章特别强调了风险控制和避坑技巧,适用于需要提升系统兼容性的企业级用户。

weixin_29611239的博客 408

炮兵阵地题解

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

Penguin_Wang的博客 742

基于RK3588边缘计算平台的人数统计系统设计与实现

针对人数统计场景优化的YOLOv5模型完整的模型转换和部署流程高效的嵌入式推理优化方案低成本、低功耗的部署方案实时性强,满足工业应用需求可扩展性好,适配多种应用场景引入注意力机制,提高小目标检测能力结合多模态信息,增强系统鲁棒性开发可视化管理平台,提升用户体验随着边缘计算和AIoT技术的快速发展,基于深度学习的智能视觉系统必将在更多领域发挥重要作用。本项目为相关应用的开发和部署提供了有价值的参考,为推动人工智能技术的产业化应用做出了积极贡献。

LXY_LOVE36的博客 145

MobaXterm简介和使用(服务器连接工具)

MobaXterm 是一个功能强大的远程计算工具,集成了许多常用的远程计算功能,包括 SSH、X11、RDP、VNC、FTP、SFTP 等。

清平乐的技术专栏 1941

炮兵阵地(经典状压dp)

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

永夜莫明的博客 828

Carla中如何渲染opendrive车道线和车道标识(全网独家,附代码)

carla是可以单独加载opendrive并渲染路面的,但是无法把车道线渲染出来,这是一个大坑,因为没有车道线就无法给感知输入。楼主已经实现,直接渲染车道线或者带PBR贴图的车道标识。实现起来非常简单,但必须对carla源码以及ue的开发足够了解。在carla源码中有一个很重要的类opendrivegenerator,它是关于opendrive渲染的全部方法,但是你是找不到它实例化的地方的,因为它被定义在蓝图关卡中。网上包括carla官方关于carla源码的分析少之又少,楼主将自己的经验写出来供大家参考。

u013998156的博客 1090

【NOI2001】炮兵阵地

【NOI2001】炮兵阵地

CYCKCN的博客 468

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

题解 P2704 【[NOI2001]炮兵阵地】

题目链接 Solution [NOI2001]炮兵阵地 题目大意:在\(n\)行\(m\)列的地图上,在炮兵不与地形冲突,并且炮兵之间不互相冲突的前提下摆放尽可能多的炮兵.求最多可以摆放多少个炮兵 ​ 这题看到\(m\)极小的范围,以及炮兵特别的攻击范围,基本上就可以确定是状压\(dp\).我们把炮兵当成\(1\),然后就可以用一个二进制数来表示这行炮兵摆放的状态了。但是这道题的状压\(...

355

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【状压DP】【NOI2001】炮兵阵地

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

qq_43398760的博客 317

[NOI2001]炮兵阵地

题目链接 [NOI2001]炮兵阵地 分析 此题是一道经典的状压dpdpdp,需要注意的是要考虑当前行的前两行的状态,因此需要开三维数组,令dp[i][j][k]dp[i][j][k]dp[i][j][k]表示枚举到第iii行时第i−1i-1i−1行和i−2i-2i−2行的二进制状态分别为jjj、kkk的最大摆放数,则有递推方程dp[i][j][k]=max⁡(dp[i][j][k],dp[i−1][k][l]+cnt)dp[i][j][k] = \max (dp[i][j][k],dp[i - 1][k]

bxgbq的博客 183

[NOI2001] 炮兵阵地

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

pai6666的博客 330

[洛谷P2704] [NOI2001]炮兵阵地

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

dengtun2502的博客 193

洛谷 P2704 [NOI2001]炮兵阵地 (状压dp)

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

October の 补题记录 253

P2704 [NOI2001] 炮兵阵地 题解

我们需要记录多少信息才能进行状态转移?考虑到炮兵的攻击范围覆盖两行,当前行的部署必须考虑前两行的情况。dp[i][j][k] 表示处理到第 i 行时:- 第 i 行的状态是第 j 个合法状态- 第 i-1 行的状态是第 k 个合法状态时的最大炮兵数量​为什么是三维而不是二维?​​ 因为如果只记录前一行的状态,我们无法检查与再前一行的冲突关系。

tkwuhuacai的博客 1028

P2704 [NOI2001] 炮兵阵地

状态表示设表示在第i行选择了状态j、第i-1行选择了状态k时,能得到的最大士兵数。状态空间每一行有M个位置,每个位置上有两种状态(放置或者不放置士兵),所以一行共有 (2^M) 种可能的放置状态。状态合法性jk不能在同一行的相邻两个位置上都有士兵(即需要确保j和k对应的状态中的“1”不相邻)。jk不能在相邻两行的相邻位置上都有士兵。

ailbj的博客 505

总结状压DP——例题 P2704 [NOI2001]炮兵阵地

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

qq_42899221的博客 335
上一篇: USACO 2006 November Gold 玉米地Corn Fields
下一篇: Toy Bricks(HZOI模拟试题)
DancingZ
博客等级 码龄9年 10粉丝 137原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值