http://poj.org/problem?id=1185

刚开始思路就错了 想着用保存这一行的状态 然后再去枚举前面两行的状态 这样不能保证前面两行的状态同时满足要求

正解:保存两行的状态 再依次枚举前面的

各种小错误不断啊 改的一个纠结。。

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
char c;
int p[],o[],dp[][][],f[],x[];
int main()
{
int i,j,n,m,e,a,k,g;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(p,,sizeof(p));
memset(f,,sizeof(f));
memset(o,,sizeof(o));
p[] = ;
for(i = ; i <= ; i++)
p[i] = p[i-]*;
for(i = ; i < n ; i++)
{
getchar();
for(j = ; j < m ; j++)
{
scanf("%c",&c);
if(c=='P')
f[i]+=p[j];
}
}
memset(dp,,sizeof(dp));
k = ;
for(i = ; i < <<m ; i++)
{
if((i&(i<<)))
continue;
if((i&(i>>)))
continue;
if((i&(i>>)))
continue;
if((i&(i<<)))
continue;
for(e = ; e < m ; e++)
if((i&(<<e))!=)
o[i]++;
k++;
x[k] = i;
}
for(i = ; i <= k ;i++)
if((x[i]&(f[]))==x[i])
{
for(j = ; j <= k ; j++)
if((x[j]&(f[]))==x[j]&&(x[i]&x[j])==)
dp[][i][j] = o[x[i]]+o[x[j]];
}
for(i = ; i < n ; i++)
{
for(j = ; j <= k ;j++)
{
if((x[j]&f[i])!=x[j])
continue;
for(g = ; g <= k ; g++)
{
if(x[g]&x[j])
continue;
if((x[g]&(f[i-]))!=x[g])
continue;
for(a = ; a <= k ; a++)
{
if((x[a]&(f[i-]))!=x[a])
continue;
if(x[a]&x[j])
continue;
dp[i%][j][g] = max(dp[i%][j][g],dp[(i-)%][g][a]+o[x[j]]);
}
}
}
}
int ans=;
if(n==)
{
for(i = ; i <= k ; i++)
if((f[]&x[i])==x[i])
ans = max(o[x[i]],ans);
}
else
{
for( i =; i <= k ; i++)
for(j = ; j <= k ; j++)
ans = max(ans,dp[(n-)%][i][j]);
}
printf("%d\n",ans);
}
return ;
}
/*
14 10
PPPPPPPPPP
PPPPPPPPPP
HHHHHHHHHH
PPPPPPPPPP
HHHHHHHHHH
HHHHHHHHHH
PPPPPPPPPP
PPPPPPPPPP
PPPPPPPPPP
HHHHHHHHHH
PPPPPPPPPP
HHHHHHHHHH
HHHHHHHHHH
PPPPPPPPPP
*/
/*
3 4
PHPP
PPHH
PPPP
*/

poj炮兵阵地(状压)(25+10+20=55)的更多相关文章

  1. POJ 1185 炮兵阵地 状压dp

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

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

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

  3. POJ1185 炮兵阵地 —— 状压DP

    题目链接:http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions ...

  4. TZOJ 4912 炮兵阵地(状压dp)

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

  5. 洛谷P2704 [NOI2001]炮兵阵地 [状压DP]

    题目传送门 炮兵阵地 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图 ...

  6. [NOI2001]炮兵阵地 状压DP

    题面: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最多 ...

  7. [POJ1185][NOI2001]炮兵阵地 状压DP

    题目链接:http://poj.org/problem?id=1185 很裸的状压,考虑对于一行用二进制储存每一种的状态,但是状态太多了做不了. 观察到有很多状态都是不合法的,于是我们预处理出合法的状 ...

  8. P2704 [NOI2001]炮兵阵地 (状压DP)

    题目: P2704 [NOI2001]炮兵阵地 解析: 和互不侵犯一样 就是多了一格 用\(f[i][j][k]\)表示第i行,上一行状态为\(j\),上上行状态为\(k\)的最多的可以放的炮兵 发现 ...

  9. 炮兵阵地 /// 状压DP oj26314

    题目大意: 炮兵阵地 设置炮兵的位置 其上两位 下两位 左两位 右两位 不能同时设置炮兵 这题是 corn fields玉米地 的升级版 可以先看下这题的注释 更详细些 第一种方法是网上大多数题解的解 ...

  10. luogu 2704 炮兵阵地 状压dp

    状压的基础题吧 第一次看感觉难上天,后来嘛就.. 套路:先根据自身状态筛出可行状态,再根据地图等其他限制条件筛选适合的状态加入答案 f i,j,k 分别代表 行数,本行状态,上行状态,再累加答案即可 ...

随机推荐

  1. C--指针函数,static

    (*p)是固定写法,代表指针的变量P将来是指向函数 void (*p)(); p=test;//指针变量P指向了test函数 函数名test代表函数地址 //同等调用test()函数 (*p)(); ...

  2. ios - cordova(phoneGap)

    安装教程 下载 node.js. http://nodejs.org/ 下载后,直接安装就可以了. 安装 Cordova工具, $ sudo npm install -g cordova 创建APP: ...

  3. KMP入门(匹配)

    Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M ...

  4. HIT 1867 经理的烦恼

    题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=1867 每次更新时判断是否素数,如果从非素数变成素数就Update(x, 1),如果从素数变成非素数就U ...

  5. QQ登录网站接入

    QQ网站登录是一个非常常用的功能,网上有很多的资料,在此只做一个整理: QQ登录接入也在不断的升级,目前我发布的是2.1,很多资料里显示的那些繁杂的步骤已经不需要了: 第一步需要先申请,申请地址如下: ...

  6. Openstack安装

    作者:陈沙克 Openstack发展很猛,很多朋友都很认同,2013年,会很好的解决OpenStack部署的问题,让安装,配置变得更加简单易用. 很多公司都投入人力去做这个,新浪也计划做一个Opens ...

  7. HTMLImageElement类型的简便利用

    这个是我在复习书籍的时候看见的,当时一个同学想通过页面发送请求,但是数据量不是太大,所以用的get方式,但是页面用表单提交请求的话会让页面进行跳转,当时我在网上查了一点资料,发现基本上都是通过ajax ...

  8. aspx与mvc页面验证码

    验证码类代码 using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Dr ...

  9. JS 日期格式转换

    //Json 数据年月日 返回 直接传入参数 如/Date(1379433600000)/ function GetDate(date) { if (date == null) return null ...

  10. 深入理解Oracle的imp/exp 和各版本之间的规则

    Oracle数据中IMP/EXP工具可用于对数据进行迁移.IMP命令用于把Dmp文件从本地导入到远程数据库服务器,而EXP命令则是把数据从远程数据库服务器导出到本地的Dmp文件.其功能相当于Oracl ...