n*m

P 和 M

P可以放人 M不行

人不能相互打到 问最多可以放多少人

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<map> using namespace std; #define MAXN 1<<10
char z[][];
int x[];
int dp[][][];
int num[];
int cn[]; int Count(int a)
{
int ans=;
while(a>)
{
if(a&)
ans++;
a=a>>;
}
return ans;
}
int main()
{
int n,m; while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<n;i++)
scanf("%s",z[i]);
memset(x,,sizeof(x));
memset(dp,-,sizeof(dp));
int cnt=;
int en=<<m;
for(int i=;i<en;i++)
if(((i&(i<<))||(i&(i<<)))==)
{
cn[cnt]=Count(i);
num[cnt++]=i;
}
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
if(z[i][j]=='H')
x[i]|=(<<j);
} for(int i=;i<cnt;i++)
{
if(x[]&num[i])
continue;
dp[][i][]=cn[i];
} for(int i=;i<n;i++) //行
{
for(int j=;j<cnt;j++) //这行的状态
{
if(x[i]&num[j]) //不能矛盾
continue;
for(int k=;k<cnt;k++) //上一行的状态
{
if(num[j]&num[k]) //相邻两行不能同时出现1
continue;
for(int k1=;k1<cnt;k1++) //上面第二行状态
{
if(num[j]&num[k1]) //相邻两行不能同时出现1
continue;
if(dp[i-][k][k1]==-)
continue;
dp[i][j][k]=max(dp[i][j][k],dp[i-][k][k1]+cn[j]);
}
}
}
}
int ans=;
for(int i=;i<cnt;i++)
for(int j=;j<cnt;j++)
ans=max(dp[n-][i][j],ans);
printf("%d\n",ans);
}
return ;
}

炮兵阵地 POJ 1185的更多相关文章

  1. 炮兵阵地 - POJ 1185(状态压缩)

    分析:先枚举出来所有的合法状态(当N=10的时候合法状态最多也就60种),用当前状态匹配上一行和上上一行的状态去匹配,看是否可以.....复杂度100*60*60*60,也可以接受. 代码如下: == ...

  2. 状压dp(B - 炮兵阵地 POJ - 1185 )

    题目链接:https://cn.vjudge.net/contest/276236#problem/B 题目大意:略  具体思路:和我的上一篇写状压dp的思路差不多,不过就是这个题相当于上一个题的升级 ...

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

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

  4. POJ 1185 状态压缩DP 炮兵阵地

    题目直达车:   POJ 1185 炮兵阵地 分析: 列( <=10 )的数据比较小, 一般会想到状压DP. Ⅰ.如果一行10全个‘P’,满足题意的状态不超过60种(可手动枚举). Ⅱ.用DFS ...

  5. POJ 1185 炮兵阵地 状压dp

    题目链接: http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K 问题描述 司令部的将军们打算在N*M ...

  6. 【简●解】POJ 1185,LG P2704【炮兵阵地】

    POJ 1185,LG P2704[炮兵阵地] 状压经典入门. [传送门] POJ 1185 洛谷 P2704 [题目大意] 司令部的将军们打算在 \(N\times M\) 的网格地图上部署他们的炮 ...

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

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

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

    题目链接 POJ 1185 今天艾教留了一大堆线段树,表示做不动了,就补补前面的题.QAQ 这个题,我第一次写还是像前面HDU 2167那样写,发现这次影响第 i 行的还用i-2行那样,那以前的方法就 ...

  9. poj - 1185 炮兵阵地 状压DP 解题报告

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

随机推荐

  1. JavaSE复习总结之集合(Collection)

    Java早期版本只给集合类库提供了很少的一组类,但是随着Java版本的升级,Java集合类库越来越充实.集合类库里面存放的,是各式各样的数据容器,我们基本都学过数据结构这门课,数据结构所讲的就是ADT ...

  2. CF 407B Long Path[观察性质 DP]

    B. Long Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  3. java设计模式:单例模式

    单例模式:运行期间有且仅有一个实例 1.一个类只有一个实例 2.必须自行创建这个实例 3.必须自行向整个系统提供这个实例 懒汉模式: 在类加载时不创建实例,运行调用时创建.类加载快,在运行时获取对象慢 ...

  4. JAVA代码中加了Try...Catch的执行顺序

    public static String getString(){ try { //return "a" + 1/0; return "a"; } catch ...

  5. Code! MVC 5 App with Facebook, Twitter, LinkedIn and Google OAuth2 Sign-on (C#)

    http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2- ...

  6. 自定义右键菜单中bug记录

    今天客服部提出一个Bug,拖动滚动条到底部右键表格下方的数据,然后点击拨打电话打出的是表格上面的号码,看了下代码发现bug的原因是因为获取表格中电话号码的方式是通过给tr绑定了mouseover事件, ...

  7. Java8简单的本地缓存实现

    原文出处:lukaseder         Java8简单的本地缓存实现 这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存.因为Map有一个新的方法,在 ...

  8. Android入门篇2-activity调用跟数据传递

    一.activity调用 假设ActivityTest调用SecondActivity 1.显示调用 button1.setOnClickListener(new View.OnClickListen ...

  9. Meet Python: little notes 2

    From this blog I will turn to Markdown for original writing. Source: http://www.liaoxuefeng.com/ ♥ l ...

  10. 利用Canvas进行绘制XY坐标系

    首先来一发图 绘制XY的坐标主要是利用Canvas setLeft和setBottom功能(Canvas内置坐标的功能) 1.首先WPF中的坐标系都是从左到右,从上到下的 即左上角位置(0,0)点,所 ...