1734: 炮兵阵地

[命题人 :

#include <queue>
#include <math.h>
#include <stack>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <iomanip>
#include <string.h>
#include <algorithm>
using namespace std;
#define LL long long
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
int n , m;
int map[200][20] , fmap[105][200];
int dp[105][200][200];
int flag[N] , can[N] , cnt , num[N];
void init()
{int len = (1 << m) - 1;for(int i = 0 ;i <= len ; i++){int f1 = (i << 1) & i;int f2 = (i << 2) & i;if(!f1 && !f2){  flag[i] = 1;int k = i;while(k){num[cnt]++;k -= k&-k;}can[cnt++] = i;}   }}
int main()
{cin >> n >> m;init();for(int i = 1 ; i <= n ; i++)for(int  j = 1 ; j <= m ; j++){char c;cin >> c;if(c == 'P')map[i][j] = 1;}for(int i = 1 ; i <= n ; i++)for(int j = 0 ; j < cnt ; j++){int f = 1;int l = 1;int s = can[j];while(s){if( (s&1) && (map[i][l] == 0) ){f = 0;break;}s >>= 1;l++;}if(f)fmap[i][j] = 1;}int maxx = 0;for(int i = 0 ; i < cnt ; i ++)if(fmap[1][i])for(int j = 0 ; j < cnt ; j ++){dp[1][i][j] = num[i];maxx = max(maxx , num[i]);}for(int i = 0 ; i < cnt ; i ++)if(fmap[2][i])for(int j = 0 ; j < cnt ; j ++)if( (can[i] & can[j]) == 0){int kk = dp[2][i][j] = num[i] + dp[1][j][j];maxx = max(maxx , kk );}for(int k = 3 ; k <= n ; k++)for(int i = 0 ; i < cnt ; i++)if(fmap[k][i])for(int i1 = 0 ; i1 < cnt ; i1++){int nn = 0;if( (can[i] & can[i1]) == 0){for(int i2 = 0 ; i2 < cnt ; i2++){if ( (can[i] & can[i2])== 0 && (can[i2] & can[i1]) == 0 )nn = max(nn , num[i] + dp[k-1][i1][i2]);}}dp[k][i][i1] = nn;maxx = max(nn , maxx);}cout << maxx << endl;return 0;
}

]

时间限制 : 1.000 sec  内存限制 : 128 MB

提交解决: 9提交量: 14统计

题目描述

原题来自:NOI 2001

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

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

输入

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

输出

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

样例输入 Copy

5 4
PHPP
PPHH
PPPP
PHPP
PHHP

样例输出 Copy

6

提示

数据范围与提示

N \le 100, M \le 10N≤100,M≤10。

来源/分类

ybttg DP 状态压缩

提交讨论版

1734: 炮兵阵地相关推荐

  1. POJ 1185 炮兵阵地 (状压DP)

    炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14869   Accepted: 5575 Description ...

  2. hdu4539 郑厂长系列故事——排兵布阵 + POJ1158 炮兵阵地

    题意: 郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Other ...

  3. poj 1185 NYOJ 85 炮兵阵地(状态压缩dp)

    炮兵阵地 时间限制:2000 ms  |  内存限制:65535 KB 难度:6 描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地 ...

  4. POJ1185 炮兵阵地 状压DP

    炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 31819   Accepted: 12295 Descriptio ...

  5. 状压dp之二之三 炮兵阵地/玉米田 By cellur925

    一.简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ ...

  6. C++ 洛谷 P2704 [NOI2001]炮兵阵地

    P2704 [NOI2001]炮兵阵地 没学状压DP的看一下 此题意思很简单,如下图,就是十字架上的不能有两个点放炮兵. 在做此题前,先做一下玉米田 玉米田题解 分析: 而m即一行的个数小于等于10, ...

  7. AcWing292.炮兵阵地(状压DP)题解

    Acwing.炮兵阵地 题目传送门 题目描述 司令部的将军们打算在N * M的网格地图上部署他们的炮兵部队.一个N * M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表 ...

  8. POJ 1185 炮兵阵地(动态规划+状态压缩)

    炮兵阵地 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原( ...

  9. NYOJ 81:炮兵阵地(状压DP)

    炮兵阵地 时间限制:2000 ms  |  内存限制:65535 KB 难度:6 描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地 ...

最新文章

  1. 赠书 | 手把手教你自己动手打造一个智能恒温器
  2. IOS使用Instrument-Time Profiler工具分析和优化性能问题
  3. easyui panel 默认折叠 右上角按钮
  4. 一个简单遮罩弹窗效果
  5. 生产路由跳转报错找不到js路径问题
  6. java定时器偶尔重复推送_在Java中创建重复的定时器提醒
  7. 某android平板项目开发笔记--自定义sharepreference UI
  8. 我是一名普通程序员,通过自己的努力,我的收入涨了3倍!
  9. 您在2016年OpenStack峰会上错过的事情
  10. php榛子云短信验证,java + maven +榛子云短信 实现发送短信验证码功能
  11. 一个IT时代的终结:109岁的IBM将分拆为两家公司
  12. LMS Virtual Lab对发动机噪声进行仿真的2种方法
  13. 算法63----丑数【动态规划】
  14. [翻译]A MAP BASED ON LASERSCANS WITHOUT GEOMETRIC INTERPRETATION
  15. win10设置mysql环境变量
  16. 三极管电路限流电阻如何选择
  17. 关于南京市大学生办理住房补贴的流程示意图
  18. 汽车电子控制器(ECU)的硬件设计流程
  19. 树莓派Win10镜像下载安装教程及使用初体验
  20. ansys怎么批量输入点坐标_AUTO CAD批量输入坐标的技巧

热门文章

  1. 借鉴:软考高项备考考试心得,来自一名学员的总结,非常全
  2. java键盘输入怎么输入汉字,图文教你java怎么接收从键盘输入的字符串
  3. 一个庄稼汉的炒股心得
  4. 系统中出现许多wmiprvse.exe进程的处理方法
  5. VMware P2V 转换实验
  6. GF1WFV数据预处理
  7. 集成mybatis对数据更新和查询加解密操作
  8. groovy脚本执行与优化
  9. java 当前时间戳_通过各种方法 获取当前系统时间、时间戳
  10. 分享一些优秀的思维导图作品