传送门

可以事先把每一行的所有状态处理出来,发现每一行的状态数最多不超过60个

f[i][j][k]表示前i行,第i行为状态j,第i-1行为状态k的最优解

#include <vector>
#include <cstdio>
#define N 101
#define max(x, y) ((x) > (y) ? (x) : (y)) int n, m, ans;
char map[N][N];
std::vector <int> S[N], cnt[N];
int f[N][N][N];
//f[i][j][k]表示前i行,第i行为状态j,第i-1行为状态k的最优解 inline void dfs(int s, int c, int last, int k)
{
int i;
S[k].push_back(s);
cnt[k].push_back(c);
for(i = last + 1; i <= m; i++)
if(map[k][i] != 'H' && !(s & (1 << i - 1)) && (!(s & (1 << i - 2)) || i == 1))
dfs(s | (1 << i), c + 1, i, k);
} int main()
{
int i, j, k, l;
scanf("%d %d", &n, &m);
for(i = 1; i <= n; i++) scanf("%s", map[i] + 1);
for(i = 1; i <= n; i++) dfs(0, 0, 0, i);
for(i = 0; i < S[1].size(); i++) f[1][i][0] = cnt[1][i];
for(i = 0; i < S[2].size(); i++)
for(j = 0; j < S[1].size(); j++)
if(!(S[1][j] & S[2][i]))
f[2][i][j] = max(f[2][i][j], f[1][j][0] + cnt[2][i]);
for(i = 3; i <= n; i++)
for(j = 0; j < S[i].size(); j++)
for(k = 0; k < S[i - 1].size(); k++)
for(l = 0; l < S[i - 2].size(); l++)
if(!(S[i][j] & S[i - 1][k]) && !(S[i][j] & S[i - 2][l]) && !(S[i - 1][k] & S[i - 2][l]))
f[i][j][k] = max(f[i][j][k], f[i - 1][k][l] + cnt[i][j]);
if(n == 1)
for(i = 0; i < S[1].size(); i++) ans = max(ans, f[1][i][0]);
else
for(i = 0; i < S[n].size(); i++)
for(j = 0; j < S[n - 1].size(); j++)
ans = max(ans, f[n][i][j]);
printf("%d\n", ans);
return 0;
}

  

[luoguP2704] 炮兵阵地(状压DP)的更多相关文章

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

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

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

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

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

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

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

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

  5. luogu 2704 炮兵阵地 状压dp

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

  6. POJ 1185 炮兵阵地 状压dp

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

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

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

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

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

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

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

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

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

随机推荐

  1. POJ 3522 Slim Span 暴力枚举 + 并查集

    http://poj.org/problem?id=3522 一开始做这个题的时候,以为复杂度最多是O(m)左右,然后一直不会.最后居然用了一个近似O(m^2)的62ms过了. 一开始想到排序,然后扫 ...

  2. word2vec的Java源码【转】

    一.核心代码 word2vec.java package com.ansj.vec; import java.io.*; import java.lang.reflect.Array; import ...

  3. leetcode315 Count of Smaller Numbers After Self

    思路: bit + 离散化. 实现: #include <bits/stdc++.h> using namespace std; class Solution { public: int ...

  4. jq获取设置选中值

    var standard = $('input[name="standard"]:checked').val(); $("input[name='advertByid'] ...

  5. Selenium私房菜系列--总章

    前言 在这段期间,我一直在找关于服务器的端测试方案,自动化工具等等,无意间我发现了Selenium这个工具.在试用一段时间后,觉得Selenium确实是一个很不错的Web测试工具.在和强大的QTP比较 ...

  6. SQLServer · 最佳实践 · SQL Server 2012 使用OFFSET分页遇到的问题

    1. 背景 最近有一个客户遇到一个奇怪的问题,以前使用ROW_NUMBER来分页结果是正确的,但是替换为SQL SERVER 2012的OFFSET...FETCH NEXT来分页出现了问题,因此,这 ...

  7. echarts简单用法快速上手

    1.html结构 简单说就是一个标签一个图表:2.初始化:var myEcharts = echarts.init(document.getElementById("xxx")): ...

  8. 解决jenkins插件列表为空的问题

    可能是由于Jenkins的更新网站被QIANG,因此,请使用 http://mirror.xmission.com/jenkins/updates/update-center.json 来进行更新

  9. Socket是什么呢?中间软件抽象层

    代表着网络连接 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用 ...

  10. docker的网络配置

    Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式: host模式:使用–net=host指定. c ...