-
B - 炮兵阵地
- POJ - 1185
- 对于原始的矩阵,我们用0来表示可以放置炮兵,即对应图中的P,这样每一行都有一个可以放置炮兵的状态,存到row[N]中,用来check该行的状态是否合法。
- 由于当前行和前两行有关系,所以得用3维矩阵来保存一个状态下最多的炮兵个数,用dp[i][curst][prest]表示当前第i行状态对curst,前一行状态为prest的最大炮兵数。
- 转移方程为dp[i][curst][prest]=max{dp[i-1][prest][preprest]},这样求到最后一行之后,答案就是最后一行所有状态中最大的那个。程序初始化的时候需要对第一行
- 进行预处理,设置dp[0][st][0]=st合法&st中1的个数。这样进行下面的计算的时候,由于0状态肯定是和所有状态兼容的,所以就不会影响计算结果。
-
#include<iostream> #include<stdio.h> using namespace std; #define maxn 111 #define judge(a,b) a&b int row[maxn],m,n; int legal[maxn]; int dp[maxn][maxn][maxn]; int num[maxn],cnt; char str[15]; int cal(int x) { int rng=0; while(x) { x&=(x-1); rng++; } return rng; } int main() { scanf("%d%d",&n,&m); for(int i=0; i<n; i++) { scanf("%s",str); for(int j=0; j<m; j++) { if(str[j]=='H') row[i]+=(1<<j); } } for(int i=0; i<(1<<m); i++) { if(judge(i,i<<1)||judge(i,i<<2))continue; num[cnt]=cal(i); legal[cnt++]=i; } for(int i=0; i<cnt; i++) { if(judge(legal[i],row[0]))continue; dp[0][i][0]=num[i]; } for(int r=1; r<n; r++) for(int i=0; i<cnt; i++) { if(judge(legal[i],row[r]))continue; for(int j=0; j<cnt; j++) { if(judge(legal[j],row[r-1]))continue; if(judge(legal[i],legal[j]))continue; for(int k=0; k<cnt; k++) { if(judge(legal[k],row[r-2]))continue; if(judge(legal[i],legal[k]))continue; if(judge(legal[j],legal[k]))continue; dp[r][i][j]=max(dp[r][i][j],dp[r-1][j][k]+num[i]); } } } int ans=0; for(int i=0; i<cnt; i++) for(int j=0; j<cnt; j++) ans=max(ans,dp[n-1][i][j]); printf("%d\n",ans); return 0; }
相关推荐
采用MPU6050的手势遥控器
随着社会的发展与进步,电子产品日益更新,个人家庭迎来了越来越多的智能家电。然而,现在的智能电子设备产品的遥控器多数都是按键形的。操作繁琐不直观,学习成本大。并且对于有老人小孩的家庭,给他们的操作带来了巨大的障碍。手势遥控器是指利用简单的手势来指挥电子设备,获得便捷的操作体验。让家庭成员都可以享受科技发展带来的福利。MPU6050是一个运动传感器,内置陀螺仪,再由电子设备利用判断结果做出相应的响应即...
【NOI2001】炮兵阵地
Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格
网格自适应_Comsol案例解析17:自适应网格的使用
本期导读自适应网格细化有许多优势,比如可以不用对网格进行全局加密,增加计算精度,又会降低求解自由度。本期仍然以气泡上升案例为例,在两相流模块中使用自适应网格。【打开案例模型】【修改网格】适当让气泡边界加密,注意,曲率因子越小,曲线上的网格越密【添加自适应网格】使用默认的参数即可,这里的误差指示器用的是水平集phi。可以根据具体求解模型选择适当的自变量作为误差指示器。【口诀】默认的一般是最...
状压dp(B - 炮兵阵地 POJ - 1185 )
题目链接:https://cn.vjudge.net/contest/276236#problem/B 题目大意:略 具体思路:和我的上一篇写状压dp的思路差不多,不过就是这个题相当于上一个题的升级版,变成了左右,上下都会有限制,并且限制的步数是2,观察数据范围,如果按照上一个题的话,如果要是计算正确的范围取值的话,肯定会超时,所以我们可以先将所有的满足的情况先筛选出来,就算m取到10...
PaddleOCRv5训练自己的模型-微调文字识别模型
本文介绍了使用PaddleOCR微调文字识别模型的具体步骤。首先需要按照官方格式准备数据集,包括图片和标注文件。然后进行模型训练,包括环境安装、预训练模型下载、配置文件修改等关键环节,特别针对训练中可能出现的类别数不匹配问题提供了三种解决方案。文章还详细说明了模型导出为静态图格式的方法,以及如何调用训练好的模型进行推理。整个过程涉及多个技术细节,如早停机制设置、断点续训方法等,为需要提升OCR识别精度的开发者提供了实用指导。
数理逻辑1 -- 命题演算1
一直对逻辑的东西很感兴趣,尤其最近做的东西和AI相关,因此下定决心系统地学习数理逻辑。这些笔记并不是严谨的描述,只是作为一些概念的快速参考,以及加入一些个人认为好玩的公式、定理和推导。 简单来说,数理逻辑系统是由一串“符号”组成的系统,基本元素是那一堆“符号”,由“符号”组成“式子”。逻辑系统并不关心“式子”是否对错,只关心“式子”是否存在,也即是假定存在某些“式子“,再确定”推导规则“(Rule
dp之状压
1. dp 状压 * A - Corn Fields POJ - 3254 * B - 炮兵阵地 POJ - 1185 * C - Hie with the Pie POJ - 3311 * D - Travelling HDU - 3001 * E - Islands and Bridges POJ - 2288 状压 状压目前有两种,一种比如AB就是把状态转换...
HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能
HAL STM32+EC11编码器实现增减调节及单击、双击、长按功能
暑假专题3,状压DP 区间DP
状压DP A - Corn Fields POJ3254 Description Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the c...
【keil5和STC-ISP】保姆级下载安装教程
点击下载中的产品下载。然后就会看到如下界面:可以看到,提供了针对不同芯片架构的四套独立开发工具。:你使用的51单片机,其核心就是。C51套件里的编译器是专门为这个架构优化的。:如果安装了MDK-Arm,你在创建新项目时将像“AT89C51”这样的51系列芯片型号,无法进行开发。进入如下界面:双击下载 → 双击运行安装 → 同意协议并下一步 → 使用默认安装路径 → 完成安装。
【Zephyr存储专题】09_LittleFs文件系统操作
本文档旨在为开发者介绍Zephyr下Littlef's文件系统相关配置使用指南
POJ部分状压dp的题目(更新进度3/5)
状压dp刷题记录 挑战后面四道状压dp。 Poj2441–Arange the Bulls Poj2441 题目链接在上面了。根据题目的数据范围,很显然就可以状态压缩,最多只有20的Barns,但是需要注意不能直接开 N * (1<<M)大小的dp数组,会爆。需要对空间优化,用滚动数组,从后往前递推。因为使用了滚动数组,所以不能记忆化搜索。 #include <iostrea...
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
DP - 状压DP - Corn Fields(POJ - 3254) + 炮兵阵地(NOI - 2001)
DP - 状压DP - 玉米田 + 炮兵阵地(NOI - 2001) 文章目录DP - 状压DP - 玉米田 + 炮兵阵地(NOI - 2001)1、玉米田2、炮兵阵地(NOI - 2001) 1、玉米田 农夫约翰的土地由M*N个小方格组成,现在他要在土地里种植玉米。 非常遗憾,部分土地是不育的,无法种植。 而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边缘。 现在给...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
poj 1185 炮兵阵地 状压dp
题目链接 题意 在\(N\times M\)的\(0,1\)格子上放东西,只有标记为\(1\)的格子可以放东西,且每一格的向上两个,向下两个,向左两个,向右两个格子均不能放东西。问整张图上最多能放多少东西。 思路 参考:accry. 因为每一行的状态与上两行有关,所以用\(dp[i][j][k]\)表示放到第\(i\)行,当前行的状态为\(j\),上一行的状态为\(k\)时的情况总数。 ...
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
POJ 1185 炮兵阵地 【状压DP】
<题目链接> 题目大意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: ...
POJ 1038 Bugs Integrated Inc (复杂的状压DP)
\(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的。其实根据之前那道炮兵阵地就不应该写的,但是总觉得自己的思路会好一些,码量又小。 博主的核心思路其实就是用一个二进制数来压缩三行的状态,因为二进制的左移右移很方便。然后就是如果三进制会很不好转移。 我们可以用一个二进...
【简●解】POJ 1185,LG P2704【炮兵阵地】
POJ 1185,LG P2704【炮兵阵地】 状压经典入门。 【传送门】 POJ 1185 洛谷 P2704 【题目大意】 司令部的将军们打算在 \(N\times M\) 的网格地图上部署他们的炮兵部队。一个 \(N\times M\) 的地图由 \(N\) 行 \(M\) 列组成,地图的每一格可能是山地(用 H 表示),也可能是平原(用 P 表示),如下图。在每一格平原地形上最多可以布...
状压DP详解(2)--状态的预处理+经典例题剖析--POJ1185炮兵阵地
在看本篇之前你需要对状态压缩较为理解,同时应该明白了我的前两篇博客状压0和1。 状压0https://blog.youkuaiyun.com/qq_43906000/article/details/90798220 状压1https://blog.youkuaiyun.com/qq_43906000/article/details/90815938 解决了前两篇博客的问题后可能有种状压DP不过如此的错觉,不过让你产生错觉...
poj 1185 炮兵阵地(状压DP)
炮兵阵地 \(solution:\) 这一道题限制条件有点多,我们需要逐个击破: 首先要判断这一格是否为山地,这个可以状态压缩 然后我们的左右一定距离不能有炮兵,这是一个突破口,因为我们看数据发现每行不超过十个格子!这样的话我们完全可以预处理出来每一行的填充方案而且这些方案肯定很少! 某一格的前面两格也不能有炮兵。这个限制最麻烦,他涉及了前两行,我们如果要从第一行开始向下推,那就必须知道...
ZOJ 3723 (浙大月赛)状压DP
A了一整天~~~终于搞掉了。 真是血都A出来了。 题目意思很清楚,肯定是状压DP。 我们可以联系一下POJ 1185 炮兵阵地,经典的状压DP。 两道题的区别就在于,这道题的攻击是可以被X挡住的,而且攻击的范围不同。 这是这道题的攻击范围。 但是这个攻击范围是会被X挡住的。 所以得在1185上加以改进。 分析: POJ 1185,因为可以隔着障碍物打,所以他每行的状态是一样
【状态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.注意与
POJ 1185 炮兵阵地 状压DP
解题方法: 第一个巧妙之处: 第一步先预处理炮车能够放置的位置(其实只有几十种),如果暴力枚举的话,时间空间都不够的。 第二个巧妙之处: 将地图的每一行状压成一个数,山地位置为1,平原为0。为什么这么状压?我们预处理的炮车放置情况,能放炮车的地方为1,不能放置炮车的地方为0,假如炮车放置情况 (1001),如果地图为(1100),我们发现如果二进制的某一位上,二者同时为1,则这个状态是冲突...
状压概率DP题目收集
Fighting Every Day! DP习题收集 一大堆好题由简到难 其他人的收集 1. 状压DP 好文章: 1 2 3 4 入门 POJ3254 Corn Fields 题目 &amp;amp; 题解 POJ1185 炮兵阵地 题目 &amp;amp; 题解 POJ3311 Hie with the Pie 题目 &amp;amp; 题解 HDU3001 Traveling 题...
POJ-1185-炮兵阵地(状压DP)
题目链接:http://poj.org/problem?id=1185 题意:见题面 题解:和做的第一道状压DP(链接:http://blog.youkuaiyun.com/haut_ykc/article/details/73136512)基本思路相同。 唯一的不同是这里要求的不是方案数,而是能够放炮兵个数的最大值,因此需要在状压的基础上加上简单的 最大值DP就好了。 DP[ i ][ j
***POJ1185 炮兵阵地 ACM解题报告(状压dp入门题)
这题是个入门的状压dp(虽然对我来说好难啊,坑了一下午终于过了。。。)难得一个中文题,还这么难 注意点挺多的,首先是要开数组记录所有情况,然后记录每种情况的炮兵数,很多处理类似于前一题3254,可以参考,不过这题更难一点,因为需要考虑两行。 所以得开个三维数组记录情况,d[i][j][k],i是当前行数,j是第i行的情况,k是i-1行的情况。 状态转移方程:d[i][j][k]=max(d[
6602



被折叠的 条评论
为什么被折叠?



