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玉米地 的升级版 可以先看下这题的注释 更详细些 第一种方法是网上大多数题解的解 ...
随机推荐
- 【转载】C# 快速高效率复制对象另一种方式 表达式树
1.需求 在代码中经常会遇到需要把对象复制一遍,或者把属性名相同的值复制一遍. 比如: public class Student { public int Id { get; set; } publi ...
- MySQL 插入数据时,中文乱码问题的解决
当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12',' ...
- mysql -- 模糊查询的四种方法
摘录自:http://www.jb51.net/article/48315.htm 1 %:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 ...
- linux -- ubuntu 脚本开机自启动
有一个脚本想在ubuntu 虚拟机开机时,自动运行. 创建脚本文件 在“/opt/lampp/”下新建一个脚本文件:lampp_start.sh #!/bin/bash /opt/lampp/lamp ...
- mysql connection不断增加
程序运行以后,刷新页面,在mysql的status里面检测到Threads_connected的值不断上升. 对程序断点调试,发现,是由于下面的代码导致. class ConnectionMySQL( ...
- tiny6410nfs挂载问题
一.制作根文件系统 1.下载最新版的 busybox 地址:http://www.busybox.net/downloads/ 2.编译busybox.先make menuconfig ,修改以下:B ...
- Mongodb 与sql 语句对照
此处用mysql中的sql语句做例子,C# 驱动用的是samus,也就是上文中介绍的第一种. 引入项目MongoDB.dll //创建Mongo连接 var mongo = new Mongo(&qu ...
- 好用的在线Markdown编辑器
dillinger.io 支持在线编辑,导出为html格式等.
- eclipse导入maven项目时报Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources
在用Eclipse IDE for Java EE Developers进行maven项目的开发时,报错Could not calculate build plan: Plugin org.apach ...
- jQueryValidate实现重复性验证
$(function(){ $("#frm").validateForm({ rules:{ 'caResourceSt ...