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

如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。
现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。
输入格式
第一行包含两个由空格分割开的正整数,分别表示 N 和 M;
接下来的 N 行,每一行含有连续的 M 个字符(P 或者 H),中间没有空格。按顺序表示地图中每一行的数据。
输出格式
仅一行,包含一个整数 K,表示最多能摆放的炮兵部队的数量。
样例
样例输入
5 4
PHPP
PPHH
PPPP
PHPP
PHHP
样例输出
6
数据范围与提示
N≤100,M≤10。
1 #include<bits/stdc++.h>
2 using namespace std;
3 int n,m;
4 long long f[105][70][70];
5 vector<int> st[105];
6 vector<int> jc[105];
7 int stt[105];
8 int js;
9 char ts[13];
10 void getst()
11 {
12 st[0].push_back(0);jc[0].push_back(0);
13 for(int i=1;i<=n;++i)
14 {
15 for(int j=0;j<(1<<m);++j)
16 {
17 if((j&(j<<1))==0 && (j&(j<<2))==0 && (j&(j>>1))==0 && (j&(j>>2))==0 && (j&stt[i])==j)
18 {
19 st[i].push_back(j);
20 int tp=0;
21 for(int x=0;x<m;++x)if(j&(1<<x))tp++;
22 jc[i].push_back(tp);
23 }
24 }
25 }
26 }
27 void dp()
28 {
29 for(int i=0;i<st[1].size();++i)f[1][i][0]=jc[1][i];
30 for(int i=2;i<=n;++i)
31 {
32 for(int s=0;s<st[i].size();++s)
33 {
34 for(int ss=0;ss<st[i-1].size();++ss)
35 {
36 if((st[i][s]&st[i-1][ss])==0)
37 for(int sss=0;sss<st[i-2].size();++sss)
38 {
39 if((st[i][s]&st[i-2][sss])==0 && (st[i-1][ss] &st[i-2][sss])==0)
40 f[i][s][ss]=max(f[i][s][ss],f[i-1][ss][sss]+jc[i][s]);
41 }
42 }
43
44 }
45 }
46 }
47 int main()
48 {
49 scanf("%d%d",&n,&m);
50 for(int i=1;i<=n;++i)
51 {
52 scanf("%s",ts);
53 for(int tp,j=0;j<m;++j)
54 {
55 stt[i]=(stt[i]<<1)|(ts[j]=='P');
56 }
57 }
58 getst();
59 dp();
60 long long ans=0;
61 for(int s=0;s<st[n].size();++s)
62 {
63 for(int ss=0;ss<st[n-1].size();++ss)
64 ans=max(ans,f[n][s][ss]);
65 }
66 cout<<ans;
67 return 0;
68 }
loj10173的更多相关文章
随机推荐
- 实体类转json 和 json转实体类
1.new JSONObject().toJSONString(rootEntity) JSONObject.toJSONString(specPrices)//specPrices实体类 2. ...
- 【代码周边】MongoDB与Mysql对比以及插入稳定性分析(指定主键的影响)
在数据库存放的数据中,有一种特殊的键值叫做主键,它用于惟一地标识表中的某一条记录.也就是说,一个表不能有多个主键,并且主键不能为空值. 无论是MongoDB还是MySQL,都存在着主键的定义. 对于M ...
- Redis基础篇(六)数据同步:主从复制
Redis具有高可靠性,体现在两方面: 一是数据尽量少丢失,通过前面介绍的持久化方式AOF和RDB,在宕机时可以恢复数据. 二是服务尽量少中断,通过副本冗余来实现. 今天我们学习的就是通过主从复制实现 ...
- 记一次由于引用第三方服务导致的GC overhead limit exceeded异常
最近笔者遇到一个问题 监控平台忽然告警 GC overhead limit exceeded 这个异常 第一反应估计是堆溢出了.于是各种各种jmap jstack下载堆栈文件和堆日志文件. 以下是 ...
- “You may need an appropriate loader to handle this file type”
这里不能为空!!!!!!!!!!!!!!!!!!!!
- Mysql Cluster7.5.6 windows10 部署安装
部署方法网上很多,以下是我的实践过程,供大家参考. 1. 硬件:3台虚拟机,全是windows 10 x64 2. 网络架构: 管理节点:192.168.37.128 数据节点 / SQL节点: 19 ...
- 一文彻底吃透MyBatis源码!!
写在前面 随着互联网的发展,越来越多的公司摒弃了Hibernate,而选择拥抱了MyBatis.而且,很多大厂在面试的时候喜欢问MyBatis底层的原理和源码实现.总之,MyBatis几乎成为了Jav ...
- git基础-远程仓库的使用
远程仓库的使用 为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库. 远程仓库是指托管在因特网或其他网络中的你的项目的版本库. 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以 ...
- Windows server 安装远程桌面及破解120天时间限制授权
一.问题描述 Windows Server系列服务器默认远程桌面连接数是2个用户(本文适用于所有Windows Server系列服务器),如果多余两个用户进行远程桌面连接时,系统就会提示超过连接数,可 ...
- 新来的运维这样用HDFS,CIO都懵了···
摘要:本文主要研究了HDFS文件系统的读写流程以及基于MRS在windows客户端下读写HDFS文件的实现. HDFS(Hadoop分布式文件系统)是Apache Hadoop项目的一个子项目. HD ...