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

思路:

d[i][j][k]表示第i行的状态为第k个状态,第i-1行的状态为第j个状态的时候 的炮的数量。

1表示放大炮, 地形状态中1表示山地。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define max(a, b) (a) > (b)?(a):(b) int cnt, c[], m, n;
char map[][], num[];
int d[][][], cur[];
bool ok(int x) //判断一行中,是否合法
{
if(x&(x<<)) return false;
if(x&(x<<)) return false;
return true;
}
void init() //初始计算这n个 有多少种合法的状态
{
int i;
cnt = ;
for(i = ; i < (<<n); i++)
if(ok(i))
c[++cnt] = i;
}
bool fit(int x, int k) //判断当前行的状态是否与 地形合法
{
if(cur[k]&x) return false;
return true;
}
int cal(int x)
{
int sum = ;
while(x)
{
sum++;
x = (x&(x-)); //计算一行中1的个数,相当于每次都减去1个1
}
return sum;
}
int main()
{
int i, j, k, t, ans;
while(~scanf("%d%d", &m, &n))
{
if(n== && m==)
break;
init();
for(i = ; i <= m; i++)
scanf("%s", map[i]);
for(i = ; i <= m; i++)
{
cur[i] = ;
for(j = ; j < n; j++)
{
if(map[i][j]=='H')
cur[i] += ;
if(j != n-)
cur[i] = (cur[i]<<);
}
}
memset(d, -, sizeof(d)); for(i = ; i <= cnt; i++) //初始第1行
{
num[i] = cal(c[i]);
if(fit(c[i], ))
d[][][i] = num[i];
}
for(i = ; i <= m; i++)
for(t = ; t <= cnt; t++)
{
if(!fit(c[t], i))
continue;
for(j = ; j <= cnt; j++)
{
if(c[t]&c[j]) continue; //判断与上上行合法
for(k = ; k <= cnt; k++)
{
if(c[t]&c[k]) continue; //判断与上行合法
if(d[i-][j][k]==-) continue;
d[i][k][t] = max(d[i][k][t], d[i-][j][k]+num[t]);
}
}
} ans = ;
for(i = ; i <= m; i++)
for(j = ; j <= cnt; j++)
for(k = ; k <= cnt; k++)
ans = max(ans, d[i][j][k]);
printf("%d\n", ans);
}
return ;
}

poj 1185 炮兵阵地(三维状态压缩dP)的更多相关文章

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

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

  2. poj 1185 炮兵阵地 [经典状态压缩DP]

    题意:略. 思路:由于每个大炮射程为2,所以如果对每一行状态压缩的话,能对它造成影响的就是上面的两行. 这里用dp[row][state1][state2]表示第row行状态为state2,第row- ...

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

    题解:nState为状态数,state数组为可能的状态 代码: #include <map> #include <set> #include <list> #inc ...

  4. luogu P2704 炮兵阵地(经典状态压缩DP)

    方格有m*n个格子,一共有2^(m+n)种排列,很显然不能使用暴力法,因而选用动态规划求解. 求解DP问题一般有3步,即定义出一个状态 求出状态转移方程 再用算法实现.多数DP题难youguan点在于 ...

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

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

  6. POJ1185炮兵阵地(状态压缩DP)

    POJ飞翔.数据弱 ZQOJ飞翔 数据强 Description 司令部的将军们打算在N×M的网格地图上部署他们的炮兵部队.一个N×M的地图由N行M列组成,地图的每一格可能是山地(用"H&q ...

  7. poj -1185 炮兵阵地 (经典状压dp)

    http://poj.org/problem?id=1185 参考博客:http://poj.org/problem?id=1185 大神博客已经讲的很清楚了,注意存状态的时候是从1开始的,所以初始化 ...

  8. 洛谷 P2704 [NOI2001]炮兵阵地 (状态压缩DP+优化)

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

  9. POJ 1185 炮兵阵地 【状压DP】

    <题目链接> 题目大意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平 ...

随机推荐

  1. 面试问到:JDBC、hibernate、ibati

    一.JDBC.Connection(连接) 优点:运行高效.快捷. 缺点:代码多.异常多.不支持跨平台. 二.ibatis 1.根据jdbc的基本建立连接. 2.通过anntation+xml.jav ...

  2. 复习JS和jQuery

    复习JS和jQuery 近些时日,以前学过的东西忘了好多.今天且写一点复习一下JS和jQuery.希冀与某年某月某日,忘却的时候,能看一下自己写的博文,尚可记起一二. 现在有需求如下:有两个按钮,一个 ...

  3. Careercup - Facebook面试题 - 6299074475065344

    2014-05-01 01:00 题目链接 原题: Given a matrix with 's. What is the maximum area of the rectangle. In . Ho ...

  4. 【BZOJ】【1022】【SHOI2008】小约翰的游戏John

    博弈论 一看题,哇这不是Nim游戏么= =直接异或起来……啊咧怎么不对? 这道题是[Anti-Nim],普通的Nim是取走最后一个就赢,这题是取走最后一个输…… 做法参见 2009年贾志豪论文< ...

  5. 【POJ】【2348】Euclid‘s Game

    博弈论 题解:http://blog.sina.com.cn/s/blog_7cb4384d0100qs7f.html 感觉本题关键是要想到[当a-b>b时先手必胜],后面的就只跟奇偶性有关了 ...

  6. 【HDOJ】【1693】Eat The Trees

    插头DP 插头dp模板题…… 这题比CDQ论文上的例题还要简单……因为不用区分左右插头(这题可以多回路,并不是一条哈密尔顿路) 硬枚举当前位置的状态就好了>_< 题解:http://blo ...

  7. oracle——merge

      一.概述 使用merge声明从一个或者更多个表或视图中筛选记录,以用来更新或者插入到一个表或视图中.你可以指定条件以决定是执行update操作还是insert操作到目标表或视图中. 这个声明是一个 ...

  8. Java中finalize()

    垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们 ...

  9. POJ 3292

    Semi-prime H-numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7059   Accepted: 3 ...

  10. 使用 C# 对文件进行压缩和解压

    C#中对文件压缩和可以使用两个类: GZipStream 类 此实例分为几个模块,分别为: 压缩函数: /// <summary> /// 压缩文件 /// </summary> ...