poj1185 炮兵阵地【状压DP】
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 32802 | Accepted: 12650 |
Description

如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。
现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。
Input
接下来的N行,每一行含有连续的M个字符('P'或者'H'),中间没有空格。按顺序表示地图中每一行的数据。N <= 100;M <= 10。
Output
Sample Input
5 4
PHPP
PPHH
PPPP
PHPP
PHHP
Sample Output
6
Source
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <cstring> using namespace std;
typedef long long LL;
#define inf 0x3f3f3f3f const int maxn = ;
int n, m, mostm;
int dp[maxn][][], dixing[maxn];
int cntone[], S[], cnt; bool valid(int i, int x)
{
if (dixing[i] & x)return false;
else return true;
} int get_one(int x)
{
int res = ;
while (x) {
res += (x & );
x >>= ;
}
return res;
} bool ok(int x)
{
if (x & (x << ))return false;
if (x & (x << )) return false;
return true;
} void getS()
{
cnt = ;
mostm = << m;
for (int i = ; i < mostm; i++) {
if (ok(i)) {
S[cnt] = i;
cntone[cnt] = get_one(i);
cnt++;
}
}
} int main()
{
while (scanf("%d%d", &n, &m) != EOF) {
getS();
memset(dixing, , sizeof(dixing));
for (int i = ; i <= n; i++) {
char tmp[];
scanf("%s", tmp);
//printf("%s", tmp + 1);
for (int j = ; j < m; j++) {
//cout<<tmp[j]<<endl;
if (tmp[j] == 'H') {
dixing[i] |= ( << (m - - j));
}
}
} memset(dp, -, sizeof(dp));
dp[][][] = ;
int ans = ;
for (int j = ; j < cnt; j++) {
if (valid(, S[j])) {
dp[][j][] = cntone[j];
ans = max(ans, dp[][j][]);
}
}
//cout<<1<<" "<<ans<<endl; for (int i = ; i <= n; i++) {
int tiaoshi = -;
for (int j = ; j < cnt; j++) {
if (valid(i, S[j])) {
for (int k = ; k < cnt; k++) {
if (valid(i - , S[k]) && (S[j] & S[k]) == ) {
int mmm = -;
for (int l = ; l < cnt; l++) {
if (valid(i - , S[l]) && dp[i - ][k][l] != - && (S[j] & S[l]) == ) {
mmm = max(mmm, dp[i - ][k][l]);
}
}
//cout<<i - 1<<" "<<mmm<<endl;
dp[i][j][k] = max(dp[i][j][k], mmm + cntone[j]);
tiaoshi = max(tiaoshi, dp[i][j][k]);
if (i == n)ans = max(ans, dp[i][j][k]);
}
}
}
}
//cout<<i<<" "<<tiaoshi<<endl;
}
printf("%d\n", ans);
} //return 0;
}
poj1185 炮兵阵地【状压DP】的更多相关文章
- POJ1185 炮兵阵地 —— 状压DP
题目链接:http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions ...
- poj1185 炮兵阵地 状压dp
司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示) ...
- TZOJ 4912 炮兵阵地(状压dp)
描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...
- 洛谷P2704 [NOI2001]炮兵阵地 [状压DP]
题目传送门 炮兵阵地 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图 ...
- [POJ1185][NOI2001]炮兵阵地 状压DP
题目链接:http://poj.org/problem?id=1185 很裸的状压,考虑对于一行用二进制储存每一种的状态,但是状态太多了做不了. 观察到有很多状态都是不合法的,于是我们预处理出合法的状 ...
- poj - 1185 炮兵阵地 状压DP 解题报告
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21553 Accepted: 8363 Description ...
- luogu 2704 炮兵阵地 状压dp
状压的基础题吧 第一次看感觉难上天,后来嘛就.. 套路:先根据自身状态筛出可行状态,再根据地图等其他限制条件筛选适合的状态加入答案 f i,j,k 分别代表 行数,本行状态,上行状态,再累加答案即可 ...
- POJ 1185 炮兵阵地 状压dp
题目链接: http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K 问题描述 司令部的将军们打算在N*M ...
- [NOI2001]炮兵阵地 状压DP
题面: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最多 ...
- 炮兵阵地 /// 状压DP oj26314
题目大意: 炮兵阵地 设置炮兵的位置 其上两位 下两位 左两位 右两位 不能同时设置炮兵 这题是 corn fields玉米地 的升级版 可以先看下这题的注释 更详细些 第一种方法是网上大多数题解的解 ...
随机推荐
- CentOS显示设置时间命令- date
概要: date命令的功能是显示和设置系统日期和时间 命令格式: date [OPTION]... [+FORMAT]date [-u|--utc|--universal] [MMDDhhmm[[CC ...
- js上传本地图片遇到的问题
1.改变页面文件上传默认的样式 <input type="text" size="20" id="upfile" style=&quo ...
- JavaSE集合(八)之Map
前面给大家介绍了集合家族中的Collection家族,这一篇给大家分享的是集合中的另一个家族就是Map家族.以前的时候学习Map的时候没有很认真的去学习,我觉得很多东西还是不是很清楚. 这次我将总结的 ...
- c++ 在线编译
#include <algorithm> #include <cstdlib> #include <fstream> #include <iostream&g ...
- Windows下配置Apache+PHP跑Wordpress拾遗
首先,我很少这么做,因为一旦有跑WAMP的需求,我就直接下一个wamp的安装包就可以了,市面上数不胜数,我一直用的是EasyPHP,不是说它有多好,而是很多年前第一次用后没什么问题,就一直用下来了.这 ...
- findmaven的英文版本号上线了
http://www.findmaven.net是一个查找Jar和查找Maven的Maven仓库搜索引擎.它能够依据Java开发人员提供的Class名或者Jar名找到包括它的Jar,同一时候提供Jar ...
- POJ 1141 Brackets Sequence(区间DP, DP打印路径)
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- 走进ELK原理
日志的分析在联调和后期维护是非常重要. 今天让我们进入ELK...让我们一起感受这个强大的日志收集,日志分析存储,日志查询界面化显示的震撼效果吧. Elasticsearch是个开源分布式搜索引擎,它 ...
- CentOS安装最新版的火狐
1. 下载最新版的火狐 Firefox-latest.tar.bz2 2.yum -y remove firefox 3.rm -rf /usr/lib/firefox ##64位的机器为l ...
- oracle数据库字符集
Oracle字符集的基本原理 1. Oracle服务器字符集 oracle以哪种字符编码存储字符,可以通过以下语句查出数据库字符集的设置. 方法1 SQL> select * from v$nl ...