https://www.luogu.org/problemnew/show/P2704

知识点:1.滚动数组:取模实现

2.位运算优先级最低

顾是if(!(a&b))而不是if(!a&b)

code:

#include <bits/stdc++.h>
#define N 101
#define M 10
using namespace std;
int n,m;
int tot = ;
int dp[][][],mp[N],state[];
int val[];
int check(int k)
{
if(((k&(k<<))==)&&((k&(k<<))==)&&((k&(k>>))==)&&((k&(k>>))==))return ;
else return ;
}
int get(int k)
{
int ans = ;
for(int i = ;i < m;i++)
{
if(k&( << i))ans++;
}
return ans;
}
char ch[N];
int main()
{
scanf("%d%d",&n,&m);
for(int i = ;i <= n;i++)
{
scanf("%s",ch);
for(int j = ;j < m;j++)
{
if(ch[j] == 'H')
{
mp[i] = mp[i]|( << j);
}
}
}
for(int i = ;i <= ( << m) - ;i++)
{
if(check(i))
{
state[++tot] = i;
val[tot] = get(i);
dp[][][tot] = val[tot];
}
}
for(int i = ;i <= tot;i++)
{
for(int j = ;j <= tot;j++)
{
if((state[i]&state[j]) == &&(state[i]&mp[]) == )
dp[][j][i] = max(dp[][j][i],dp[][][j] + val[i]);
}
}
for(int i = ;i <= n;i++)
{
for(int j = ;j <= tot;j++)
if((state[j]&mp[i]) == )
for(int k = ;k <= tot;k++)
if((state[k]&mp[i - ]) == )
for(int p = ;p <= tot;p++)
if((state[p]&mp[i - ]) == )
if((state[p]&state[k]) == && (state[k]&state[j]) == && (state[p]&state[j]) == )
dp[i % ][k][j] = max(dp[i % ][k][j],dp[(i - ) % ][p][k] + val[j]);
}
int ans = -;
for(int i = ;i <= tot;i++)
for(int j = ;j <= tot;j++)
ans = max(dp[n % ][j][i],ans);
printf("%d",ans);
return ;
}

状压dp:luogu P2704 [NOI2001]炮兵阵地的更多相关文章

  1. 状压dp之二之三 炮兵阵地/玉米田 By cellur925

    一.简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ ...

  2. luogu P2704 [NOI2001]炮兵阵地

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

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

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

  4. C++ 洛谷 P2704 [NOI2001]炮兵阵地

    P2704 [NOI2001]炮兵阵地 没学状压DP的看一下 此题意思很简单,如下图,就是十字架上的不能有两个点放炮兵. 在做此题前,先做一下玉米田 玉米田题解 分析: 而m即一行的个数小于等于10, ...

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

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

  6. 【题解】洛谷P2704 [NOI2001] 炮兵阵地(状压DP)

    洛谷P2704:https://www.luogu.org/problemnew/show/P2704 思路 这道题一开始以为是什么基于状压的高端算法 没想到只是一道加了一行状态判断的状压DP而已 与 ...

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

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

  8. P2704 [NOI2001]炮兵阵地

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

  9. 洛谷P2704 [NOI2001]炮兵阵地题解

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

随机推荐

  1. C#LeetCode刷题之#326-3的幂(Power of Three)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3867 访问. 给定一个整数,写一个函数来判断它是否是 3 的幂次 ...

  2. P、NP、NPC问题详解

    转载地址 https://blog.csdn.net/bcb5202/article/details/51202589 P.NP.NPC 概念 > P问题:能够在多项式时间内解决的决策问题. - ...

  3. Go热门开源项目大全

    监控系统 项目 简介 Star数 grafana/grafana Grafana 是一个用于监控指标分析和图表展示的工具, 后端支持 Graphite, InfluxDB & Promethe ...

  4. 调试备忘录-J-Link RTT的使用(原理 + 教程 + 应用 + 代码)

    MCU:STM32F407VE MDK:5.29 IAR:8.32 目录--点击可快速直达 目录 写在前面 什么是RTT? RTT的工作原理 RTT的性能 快速使用教程 高级使用教程 附上测试代码 2 ...

  5. xshell乱码解决办法

    https://jingyan.baidu.com/article/7908e85c758a58af481ad2ae.html

  6. 【SP2916】Can you answer these queries V - 线段树

    题面 You are given a sequence \(a_1,a_2,...,a_n\). (\(|A[i]| \leq 10000 , 1 \leq N \leq 10000\)). A qu ...

  7. Nmap在实战中的高级用法(详解)

    @ 目录 Nmap在实战中的高级用法(详解) Nmap简单的扫描方式: 一.Nmap高级选项 1.查看本地路由与接口 2.指定网口与IP地址 3.定制探测包 二.Nmap扫描防火墙 1.SYN扫描 2 ...

  8. 轻松解除官方对博客后台设置页面3段html代码的限制:iframe alert flagcounter etc.的禁用

    今天我发现我的flagcounter不能用了 iframe也不能用了,无奈╮(╯_╰)╭ 第一反应是Ctrl U viewsource看看源码出了什么问题 结果竟然是这样, 因为页首和侧边栏的html ...

  9. 逃离CSDN -慕舲的黑夜-第三期

    来时,是朋友推荐查资料,后来看到CSDN的UI,好华丽高大上,也读了CSDN首页推荐的一些文章,加入CSDN. 可是后来随着博客园,蓝奏云,w3c菜鸟教程,等平台的出现,CSDN越来越令人心寒

  10. windows下RocketMQ的安装部署

    一.预备环境 1.系统 Windows 2. 环境 JDK1.8.Maven.Git 二. RocketMQ部署 1.下载 1.1地址:http://rocketmq.apache.org/relea ...