POJ1185:火炮(减少国家)
Description

假设在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它可以攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其他白色网格均攻击不到。
从图上可见炮兵的攻击范围不受地形的影响。
如今,将军们规划怎样部署炮兵部队,在防止误伤的前提下(保证不论什么两支炮兵部队之间不能互相攻击,即不论什么一支炮兵部队都不在其它支炮兵部队的攻击范围内),在整个地图区域内最多可以摆放多少我军的炮兵部队。
Input
接下来的N行,每一行含有连续的M个字符('P'或者'H')。中间没有空格。按顺序表示地图中每一行的数据。N <= 100;M <= 10。
Output
Sample Input
5 4
PHPP
PPHH
PPPP
PHPP
PHHP
Sample Output
6
与HDU4539基本上一样的题目,仅仅是在推断情况上有些不同而已
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; int n,m;
char map[105][15];
int mat[105][15];
int now[1<<10],pre[1<<10],prepre[1<<10];
int l_now,l_pre,l_prepre;
int dp[1<<10][1<<10],tem[1<<10][1<<10],tt[1<<10]; void dfs(int id,int k,int p,int sum)
{
if(k>=m)
{
now[++l_now] = p;
tt[l_now] = sum;
return;
}
if(k>=2 && mat[id][k] && !(p&(1<<(k-2))) && !(p&(1<<(k-1))))
dfs(id,k+1,p|(1<<k),sum+1);
else if(k==1 && mat[id][k] && !(p&(1<<(k-1))))
dfs(id,k+1,p|(1<<k),sum+1);
else if(k == 0 && mat[id][k])
dfs(id,k+1,p|(1<<k),sum+1);
dfs(id,k+1,p,sum);
} void solve()
{
int i,j,k,t;
tem[1][1] = pre[1] = prepre[1] = 0;
l_pre = l_prepre = 1;
for(k = 0; k<n; k++)
{
l_now = 0;
dfs(k,0,0,0);
for(i = 1; i<=l_now; i++)
for(j = 1; j<=l_pre; j++)
dp[i][j] = 0;
for(i = 1; i<=l_now; i++)
for(j = 1; j<=l_pre; j++)
for(t = 1; t<=l_prepre; t++)
{
if(now[i] & prepre[t]) continue;
if(now[i] & pre[j]) continue;
if(pre[j] & prepre[t]) continue;
dp[i][j] = max(dp[i][j],tem[j][t]+tt[i]);
}
for(i = 1; i<=l_now; i++)
for(j = 1; j<=l_pre; j++)
tem[i][j] = dp[i][j];
for(i = 1; i<=l_pre; i++)
prepre[i] = pre[i];
for(i = 1; i<=l_now; i++)
pre[i] = now[i];
l_prepre = l_pre;
l_pre = l_now;
}
} int main()
{
int i,j,ans;
while(~scanf("%d%d",&n,&m))
{
for(i = 0; i<n; i++)
{
scanf("%s",map[i]);
for(j = 0; j<m; j++)
{
if(map[i][j] == 'P')
mat[i][j] = 1;
else
mat[i][j] = 0;
}
}
solve();
ans = 0;
for(i = 1; i<=l_pre; i++)
for(j = 1; j<=l_prepre; j++)
ans = max(ans,tem[i][j]);
printf("%d\n",ans);
} return 0;
}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
POJ1185:火炮(减少国家)的更多相关文章
- poj 1185 火炮 (减少国家DP)
火炮 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19690 Accepted: 7602 Description 司 ...
- hdu 4778 Rabbit Kingdom(减少国家)
题目链接:hdu 4778 Rabbit Kingdom 题目大意:Alice和Bob玩游戏,有一个炉子.能够将S个同样颜色的宝石换成一个魔法石.如今有B个包,每一个包里有若干个宝石,给出宝石的颜色. ...
- 可能性dp+减少国家HDU4336
Card Collector Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Subm ...
- poj - 1170 - Shopping Offers(减少国家dp)
意甲冠军:b(0 <= b <= 5)商品的种类,每个人都有一个标签c(1 <= c <= 999),有需要购买若干k(1 <= k <=5),有一个单价p(1 & ...
- [ACM] hdu 5045 Contest (减少国家Dp)
Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...
- Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖
标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...
- HDU 4433 locker 2012 Asia Tianjin Regional Contest 减少国家DP
意甲冠军:给定的长度可达1000数的顺序,图像password像锁.可以上下滑动,同时会0-9周期. 每个操作.最多三个数字连续操作.现在给出的起始序列和靶序列,获得操作的最小数量,从起始序列与靶序列 ...
- Chapter06-Phylogenetic Trees Inherited(POJ 2414)(减少国家DP)
Phylogenetic Trees Inherited Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 480 Accepted ...
- POJ 2411 Mondriaan's Dream (dp + 减少国家)
链接:http://poj.org/problem?id=2411 题意:题目描写叙述:用1*2 的矩形通过组合拼成大矩形.求拼成指定的大矩形有几种拼法. 參考博客:http://blog.csdn. ...
随机推荐
- oracle 让人抓狂的错误之 null值 与 无值(无结果)-开发系列(一)
近期.在做开发.写存过的时候碰到一些问题,找了好长时间才发现原因.并且是曾经不知道的. 所以在这给记下来 给自己备忘和大家參考. 一 .null值 以下举个最简单的样例.寻常工作其中肯定比这个sql复 ...
- 因权限引起的svn提交失败的错误及其解决办法
作者:朱金灿 来源:http://blog.csdn.net/clever101 前段时间,一个网友发邮件向我请教一个svn提交失败的错误.他的具体错误是这样的: 在配置svn强制输入日志时候遇到一个 ...
- [转载]Ocelot简易教程(三)之主要特性及路由详解
上篇<Ocelot简易教程(二)之快速开始2>教大家如何快速跑起来一个ocelot实例项目,也只是简单的对Ocelot进行了配置,这篇文章会给大家详细的介绍一下Ocelot的配置信息.希望 ...
- RSA解密时javax.crypto.BadPaddingException: Data must start with zero
解决方法:要在加密后产生的byte数组转成string时要在各byte之间加个标识符,我加了个空格,然后再根据空格分隔转换回byte数组.如果不加标识符,由于byte值可能是一位到三位,无法知道某一个 ...
- 6.Swift教程翻译系列——Swift集合类型
英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 Swift提供数组和字典两种集合类型.用来存储很多值的情况.数组有序的存储一组同 ...
- protobuf入门教程
1.简介和安装 2.消息类型 3.proto3 与 proto2 的区别 4.常用序列化/反序列化接口 5.repeated限定修饰符 6.枚举(enum).包(package) 7.导入定义(imp ...
- [React] Use React Context to Manage Application State Through Routes
We’ll create a Router component that will wrap our application and manage all URL related state. We’ ...
- php如何实现万年历的开发(每日一课真是非常有效率)
php如何实现万年历的开发(每日一课真是非常有效率) 一.总结 一句话总结: 1.判断每月有多少天: 通过data函数来判断,$days=date('t',$firstday); 2.判断每月的第一天 ...
- MONyog使用图解(一)-数据库性能监控工具
原文:MONyog使用图解(一)-数据库性能监控工具 一.安装步骤 较为简单,网上可以搜索到,此处不做详细说明. 二.使用图解 此处介绍监控数据库连接量.并发量.吞吐量.响应时间等功能 1.设置连接需 ...
- html5中input的type类型有哪些(总结)
html5中input的type类型有哪些(总结) 一.总结 一句话总结:时间.颜色.(邮件.电话.url).(数字.数字范围).搜索search 二.html5中input的type类型 值 描述 ...