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

代码如下:

=========================================================================================================================

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std; const int MAXN = ;
const int MAXM = ; int dp[MAXN][MAXM][MAXM]; int HaveOne(int x, int N)
{
int s[MAXN]={}, sum=; for(int i=N-; i>=; i--)
{
s[i] = (x&);
x >>= ;
if(s[i] && (s[i+] || s[i+]))
return -;
if(s[i])sum++;
} return sum;
} int main()
{
int M, N; while(scanf("%d%d", &M, &N) != EOF)
{
char s[MAXN];
int data[MAXN]={}, nOne[MAXM], bit[MAXM], cnt=; for(int i=; i<(<<N); i++)
{
nOne[cnt] = HaveOne(i, N);
if(nOne[cnt] != -)
{
bit[cnt++] = i;
}
} for(int i=; i<=M+; i++)
{
scanf("%s", s);
for(int j=; j<N; j++)
data[i] = data[i]* + (s[j]=='P' ? : );
} memset(dp, false, sizeof(dp)); int ans=; for(int t=; t<=M+; t++)
{
for(int i=; i<cnt; i++)if( !(bit[i] & data[t]) )
for(int j=; j<cnt; j++)if( !(bit[j] & data[t-]) )
for(int k=; k<cnt; k++)if( !(bit[k] & data[t-]) )
{
if(!(bit[i] & bit[j]) && !(bit[j] & bit[k]) && !(bit[i] & bit[k]))
{
dp[t][i][j] = max(dp[t][i][j], dp[t-][j][k]+nOne[i]);
ans = max(ans, dp[t][i][j]);
}
}
} printf("%d\n", ans);
} return ;
}

炮兵阵地 - POJ 1185(状态压缩)的更多相关文章

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

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

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

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

  3. POJ 1185 炮兵阵地 经典的 状态压缩dp

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

  4. poj 1185 状态压缩

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

  5. POJ 1185 状态压缩DP(转)

    1. 为何状态压缩: 棋盘规模为n*m,且m≤10,如果用一个int表示一行上棋子的状态,足以表示m≤10所要求的范围.故想到用int s[num].至于开多大的数组,可以自己用DFS搜索试试看:也可 ...

  6. 炮兵阵地 POJ 1185

    n*m P 和 M P可以放人 M不行 人不能相互打到 问最多可以放多少人 #include<stdio.h> #include<algorithm> #include< ...

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

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

  8. poj 3254(状态压缩+动态规划)

    http://poj.org/problem?id=3254 题意:有一个n*m的农场(01矩阵),其中1表示种了草可以放牛,0表示没种草不能放牛,并且如果某个地方放了牛,它的上下左右四个方向都不能放 ...

  9. poj 1324 状态压缩+bfs

    http://poj.org/problem?id=1324 Holedox Moving Time Limit: 5000MS   Memory Limit: 65536K Total Submis ...

随机推荐

  1. UIAlertController使用的一个坑

    / // 创建一个确定按钮”一定要注意不能在提醒控制器的按钮的点击方法内部用到提醒控制器自己”,不能把下面这句话放在block内部”不然会死循环,导致警告控制器不能销毁" UITextFie ...

  2. iOS-UI控件精讲之UIView

    道虽迩,不行不至:事虽小,不为不成. 相关阅读 1.iOS-UI控件精讲之UIView(本文) 2.iOS-UI控件精讲之UILabel ...待续 UIView是所有UI控件的基类,在布局的时候通常 ...

  3. 2014-11-26----css的简介

    CSS :层叠样式表 cascading style sheets 它的作用是:美化html网页 格式:样式名:值:样式名:值:样式名:值: 注释语法:/* 注释内容 */ 选中代码按TAB,代码左移 ...

  4. 24种设计模式--抽象工厂模式【Abstract Factory Pattern】

    女娲造人,人是造出来了,世界是热闹了,可是低头一看,都是清一色的类型,缺少关爱.仇恨.喜怒哀乐等情绪,人类的生命太平淡了,女娲一想,猛然一拍脑袋,忘记给人类定义性别了,那怎么办?抹掉重来,然后就把人类 ...

  5. C#如何释放已经加载的图片 (转)

    使用Image.FromFile取磁盘上的图片时,这个方法会锁定图片文件,而且会导致内存占用增大, 有几种方法解决: 一:将Image类转换成Bitmap类 System.Drawing.Image ...

  6. 【随记】还原SQL Server数据库步骤

    情景:在一台机器上备份数据库,然后在另一台机器上还原数据库,可能会出现错误提示:System.Data.SqlClient.SqlError: 备份集中的数据库备份与现有的 'XXX' 数据库不同. ...

  7. php批量发送短信或邮件的方案

    最近遇到在开发中遇到一个场景,后台管理员批量审核用户时候,需要给用户发送审核通过信息,有人可能会想到用foreach循环发送,一般的短信接口都有调用频率,循环发送,肯定会导致部分信息发送失败,有人说用 ...

  8. 国内国外最好的java开发论坛及站点 [转]

    国内: www.chinajavaworld.com -论坛人很多,高手也多,不过好像都在潜水    www.cn-java.com -也很不错,文章很好,但是就是商业性浓了点.    www.chi ...

  9. NET平台和C#

    .NET平台和C#编程 一.深入.NET框架 1..NET框架具有两个组件:CLR(公共语言运行时)和FCL(框架类库),CLR是.NET框架的基础 2.框架核心类库: System.Collecti ...

  10. Uva_11722 Joining with Friend

    题目链接 题意: 两个人坐火车, 在某个城市到站的时间段分别为[t1, t2] , [s1, s2],停在站台的时间均为w. 问, 若两人能见面的概率. 思路: 一道基础的几何概型, p = s(m) ...