poj1185-炮兵阵地(状态压缩dp)
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 25647 | Accepted: 9892 |
Description

如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。
现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。
Input
接下来的N行,每一行含有连续的M个字符('P'或者'H'),中间没有空格。按顺序表示地图中每一行的数据。N <= 100;M <= 10。
Output
Sample Input
5 4
PHPP
PPHH
PPPP
PHPP
PHHP
Sample Output
6
#include <map>
#include <cstdio>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn=;
int n,m,cnt,ans;
char ch;
int a[maxn+];
int vald[maxn+][<<+];
int valdcount[maxn+];
int dp[maxn+][maxn+][maxn+];
//map<int,int> ma[maxn+10];
bool judge(int x){
return (!(x&(x<<))&&!(x&(x<<)));
}
int BitCount(unsigned int n)
{
unsigned int c = ;
for (c =; n; ++c)
{
n &= (n -) ;
}
return c ;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
scanf(" %c",&ch);
if(ch=='H'){
a[i]|=(<<(j-));
}
}
}
for(int i=;i<=n;i++){
cnt=;
for(int j=;j<=((<<m)-);j++){
if((!(j&a[i]))&&judge(j)){
vald[i][cnt]=j;
//ma[i][j]=cnt;
cnt++;
}
}
valdcount[i]=cnt-;
}
for(int i=;i<=valdcount[];i++){
int x=vald[][i];
for(int j=;j<=(<<(m)-);j++) dp[][i][j]=BitCount(x);
}
for(int i=;i<=valdcount[];i++){
int x=vald[][i];
int q=BitCount(x);
for(int j=;j<=valdcount[];j++) {
int y=vald[][j];
if(!(x&y)) dp[][i][j]=max(dp[][i][j],q+BitCount(y));
}
}
for(int i=;i<=n;i++){
for(int j=;j<=valdcount[i];j++){
int x=vald[i][j];
int q=BitCount(x);
for(int k=;k<=valdcount[i-];k++){
int y=vald[i-][k];
for(int h=;h<=valdcount[i-];h++){
int z=vald[i-][h];
if(!(x&y)&&!(y&z)&&!(x&z)){
dp[i][j][k]=max(dp[i][j][k],dp[i-][k][h]+q);
}
}
}
}
}
for(int i=;i<=valdcount[n];i++){
int x=vald[n][i];
for(int j=;j<=valdcount[n-];j++) {
ans=max(ans,dp[n][i][j]);
}
}
printf("%d\n",ans);
return ;
}
poj1185-炮兵阵地(状态压缩dp)的更多相关文章
- POJ1185 - 炮兵阵地(状态压缩DP)
题目大意 中文的..直接搬过来... 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平 ...
- POJ1185炮兵阵地(状态压缩 + dp)
题目链接 题意:给出一张n * m的地图,其中 有的地方能放大炮,有的地方不能,大炮与上下左右两个单位范围内会相互攻击,问最多能放几个大炮 能放大炮为1不能放大炮为0,把每一行看做一个状态,要除去同一 ...
- POJ1185 炮兵阵地 状态压缩
因为不知道不同的博客怎么转,就把别人的复制过来了,这个题解写的非常好,原地址为: http://hi.baidu.com/wangxustf/item/9138f80ce2292b8903ce1bc7 ...
- luogu2704 炮兵阵地 状态压缩DP
题目大意:一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),在每一格平原地形上最多可以布置一支炮兵部队,能攻击到的区域:沿横向左右各两格,沿纵向上 ...
- poj 1185 炮兵阵地 状态压缩dp
思路:定义一个三维数组dp[x][i][j]其中x为now和pre两种状态,now表示当前两行最优解,pre表示出了本行外,前两行的最优解.那么状态转移方程为 dp[now][j][k]=max(dp ...
- POJ 3254 炮兵阵地(状态压缩DP)
题意:由方格组成的矩阵,每个方格可以放大炮用P表示,不可以放大炮用H表示,求放最多的大炮,大炮与大炮间不会互相攻击.大炮的攻击范围为两个方格. 分析:这次当前行的状态不仅和上一行有关,还和上上行有关, ...
- POJ - 1185 炮兵阵地 (状态压缩)
题目大意:中文题目就不多说大意了 解题思路: 1.每行最多仅仅有十个位置,且不是山地就是平原,那么就能够用1表示山地,0表示平原,将每一行的状态进行压缩了 2.接着找出每行能放炮兵的状态.先不考虑其它 ...
- POJ1185 炮兵阵地 —— 状压DP
题目链接:http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions ...
- [P2704][NOI2001]炮兵阵地 (状态压缩)
最近抄状压的代码…… 然后盯上了这个题目 调试了一个晚上,终于A了 但是是对着宝典打的,我依然不懂状态压缩 那么下一步先把装压放一放,学一下树形DP吧 #include<cstdio> # ...
- poj1185 炮兵阵地 状压dp
司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示) ...
随机推荐
- 30个Jquery灯箱插件
jQuery 是非常流行的JS框架,其俨然已成了开发者的必备工具,其中的jQuery Lightbox插件更是为广大开发者所喜爱.它惊人的特征之一是jQuery Lightbox插件有很多变化. 下面 ...
- navicat for mysql 安装
直接上正题,用于记录 1.下载linux版本的navicat:http://www.navicat.com/download/navicat-for-mysql 2.解压 tar -vzxf navi ...
- Zabbix数据库清理历史数据
Zabbix清理历史数据 Zabbix是个很好的监控软件,随着公司监控项目越来越多,数据越来越多,zabbix负载重,可能造成系统性能下降. Zabbix里面最大的表就是历史记录表,history,h ...
- STL容器特征总结与迭代器失效
Vector 内部数据结构:连续存储,例如数组. 随机访问每个元素,所需要的时间为常量. 在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化. 可动态增 ...
- jQuery之简单的表单验证
html部分: <body> <form method="post" action=""> <div class="in ...
- POJ1330(LCA入门题)
Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23388 Accept ...
- Jenkins Email Extension Plugin 邮件插件
1:系统管理-管理插件-可选插件 搜索Email 可列出Email Extension Plugin插件 2:选择相应的插件点 下载并安装之后重启,等待 3:安装完后,自己去重启tomcat,先s ...
- 卸载 Ubuntu gnome 自带的 Videos, Browser, Document Viewer等
卸载命令 # uninstall Browser sudo apt-get remove --purge webbrowser-app # uninstall Videos sudo apt-get ...
- BI 底座——数据仓库技术(Data Warehouse)
在开始喷这个主题之前,让我们先看看数据仓库的官方定义: 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented).集成的(Integrate).相对稳定的(Non- ...
- php file_get_contents超时处理
因为要用php去向我的虚拟主机管理系统发送开通空间等的请求,需要Post传值,由于开通空间过程很慢,同时需要延时处理.以下找到了一下file_get_contents的超时处理,网上有人用2个方法解决 ...