状压dp:luogu P2704 [NOI2001]炮兵阵地
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]炮兵阵地的更多相关文章
- 状压dp之二之三 炮兵阵地/玉米田 By cellur925
一.简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ ...
- luogu P2704 [NOI2001]炮兵阵地
题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队.一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...
- P2704 [NOI2001]炮兵阵地 (状压DP)
题目: P2704 [NOI2001]炮兵阵地 解析: 和互不侵犯一样 就是多了一格 用\(f[i][j][k]\)表示第i行,上一行状态为\(j\),上上行状态为\(k\)的最多的可以放的炮兵 发现 ...
- C++ 洛谷 P2704 [NOI2001]炮兵阵地
P2704 [NOI2001]炮兵阵地 没学状压DP的看一下 此题意思很简单,如下图,就是十字架上的不能有两个点放炮兵. 在做此题前,先做一下玉米田 玉米田题解 分析: 而m即一行的个数小于等于10, ...
- 洛谷P2704 [NOI2001]炮兵阵地 [状压DP]
题目传送门 炮兵阵地 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图 ...
- 【题解】洛谷P2704 [NOI2001] 炮兵阵地(状压DP)
洛谷P2704:https://www.luogu.org/problemnew/show/P2704 思路 这道题一开始以为是什么基于状压的高端算法 没想到只是一道加了一行状态判断的状压DP而已 与 ...
- 洛谷 P2704 [NOI2001]炮兵阵地 (状态压缩DP+优化)
题目描述 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队.一个NM的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...
- P2704 [NOI2001]炮兵阵地
题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...
- 洛谷P2704 [NOI2001]炮兵阵地题解
题目描述 司令部的将军们打算在\(N * M\)的网格地图上部署他们的炮兵部队.一个\(N * M\)的地图由N行M列组成,地图的每一格可能是山地(用\("H"\) 表示),也可能 ...
随机推荐
- Linux学习笔记之配置网络
1.打开VMware Workstation虚拟机 2.在VMware下安装虚拟ubunt系统后配置网络,如图所示配置,即可. 3.检查笔记本所使用的网段 ①按 “win + R ”键,并输入“cmd ...
- C#设计模式之4-原型模式
原型模式(Prototype Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/395 访问. 原型模式属 ...
- Vue $nextTick的一个使用场景
$nextTick 官方解释 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM 使用场景 在页面上有2个表单元素和2个按钮 btnRequiredFi ...
- PostgreSQL在没有备份情况下误删除Clog恢复
创建实验表postgres# create table t (n_id int primary key,c_name varchar(300));CREATE TABLEpostgres# inser ...
- 【Floyd】珍珠
[题目描述] 有n颗形状和大小都一致的珍珠,它们的重量都不相同.n为整数,所有的珍珠从1到n编号.你的任务是发现哪颗珍珠的重量刚好处于正中间,即在所有珍珠的重量中,该珍珠的重量列(n+1)/2位.下面 ...
- Python 用DataFrame读 存 excel
读 代码: import pandas as pd e = r'D:\pywork\12\excel信息表.xlsx' df = pd.DataFrame(pd.read_excel(e)) 存 D. ...
- JS精度损失toFixed
1234*0.01=12.3400000001 很明显后缀00001跟预期想要的不一致,起初面临这个问题我的处理方式是这样的: (1234*0.01).toString().substring(0,2 ...
- python中a, b = a, a + b这条语句是如何执行的?
a,b=b,a+b,这条语句在"理解"上还是与C语言有些差别的.在Python中,可以做下面的方式理解:首先,把等号右边的算式分别算完再说,然后按照一一对应的关系把值赋给等号左边的 ...
- powerdesigner16.5 生成sql语句
1.首先安装好designer. 2.打开之后新建一个project. 3.创建之后可能会生成这样的页面. 4.点击这个图标就能调出那个视图框. 5.在project处单机右键,New一个Concep ...
- 第三篇Scrum冲刺博客--Interesting-Corps
第三篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 主页页面跳转社区功能及社区设计及布局实现 搜索页面跳转.设计及布局实现 叶学涛 编写个人页面 ...