292.炮兵阵地(棋盘类状压dp)
292. 炮兵阵地 - AcWing题库
分析:
限制条件:
- 考虑上下 同一列两格内不能放 不能 (x>>i&1) && ((x>>(i+1)&1) || (x>>(i+2)&1))
- 考虑左右 同一行两格内不能放 要满足 (a&c|a&b|c&b)==0
- 只能在平原上面放
状态表示:已经摆放完前i-1,且第i-2行与第i-1行 第i行 都满足限制条件,且第i行的摆放状态为j,第i-1行摆放状态为k的最多炮兵数
递推方式: 0~1<<m
属性:max
状态计算/子集划分:子集应该是前面所有合法的集合
由于两格内不能连续摆放,所以要记录 i行 ,i-1行 , i-2 行 三行内的所有摆放状态,但是记录三行会超出空间,所以我们只需要记录i-1行和i行就可以了,i-2行可以在dp[i-1][j][k]中表示出来
因为最后还可能会超出空间,于是选择使用滚动数组的方法 dp[i&1]...
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
const int N=3,M=(1<<10)+10;
int dp[N][M][M];
int n,m;
int g[110];
vector<int> state;
int cnt[M];
bool check(int x)
{for(int i=0;i<m;i++)if((x>>i&1))if((x>>(i+1)&1)||(x>>(i+2)&1))return false;return true;
}int count(int x)
{int res=0;for(int i=0;i<m;i++)res+=x>>i&1;return res;
}
int main()
{cin>>n>>m;for(int i=1;i<=n;i++)for(int j=0;j<m;j++){char a;cin>>a;g[i]+=(a=='H')?1<<j:0;} dp[0][0][0]=0;for(int i=0;i<1<<m;i++)if(check(i))state.push_back(i),cnt[i]=count(i);for(int i=1;i<=n;i++)for(int j=0;j<state.size();j++)for(int k=0;k<state.size();k++){int a=state[j],b=state[k];for(auto c:state){if(a&b|a&c|b&c) continue;if((g[i]&a)||(g[i-1]&b)) continue;dp[i&1][a][b]=max(dp[i&1][a][b],dp[(i-1)&1][b][c]+count(a));}}int res=0;for(auto a:state)for(auto b:state)res=max(res,dp[n&1][a][b]);cout<<res;return 0;
}
292.炮兵阵地(棋盘类状压dp)相关推荐
- 状压dp之二之三 炮兵阵地/玉米田 By cellur925
一.简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ ...
- NYOJ 81:炮兵阵地(状压DP)
炮兵阵地 时间限制:2000 ms | 内存限制:65535 KB 难度:6 描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地 ...
- 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II
文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...
- POJ 1185 炮兵阵地 【状压DP】
<题目链接> 题目大意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平 ...
- POJ - 1185 炮兵阵地(状压dp)
题目链接:点击查看 题目大意:中文题,题意很清晰,不多赘述 题目分析:最基础的状压dp,需要考虑如何转移,因为每一个炸弹所涉及的范围都是上下左右两个格子,我们可以从第一行开始向下转移,这样某一行的状态 ...
- 洛谷P2704 [NOI2001]炮兵阵地(状压dp)
题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P&quo ...
- BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )
状压dp, 然后转移都是一样的, 矩阵乘法+快速幂就行啦. O(logN*2^(3m)) ------------------------------------------------------- ...
- POJ 1321 棋盘问题(DFS 状压DP)
用DFS写当然很简单了,8!的复杂度,16MS搞定. 在Discuss里看到有同学用状态压缩DP来写,就学习了一下,果然很精妙呀. 状态转移分两种,当前行不加棋子,和加棋子.dp[i][j]中,i代表 ...
- 状压DP学习总结 (详解,适合没状压dp基础的人学习,还在更新中,,,,)
本次博客,主要是给学弟学妹们讲解一下状压dp,不适合有基础的同学观看,可能会浪费时间,因为偏基础 先来最简单的一个吧 http://acm.hdu.edu.cn/showproblem.php?p ...
最新文章
- window下git的使用
- Exynos4412 中断驱动开发(三)—— 设备树中中断节点的创建
- 53pagecontext对象
- Magento 1.9.X 系列教程
- js 判断图片是否加载完成
- (转载)JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
- android flash游戏播放器代码,新flashplayer游戏播放器apk-新Flash游戏播放器(NEW Server Mode)预约V4.2安卓版-西西软件园...
- Python学习实验报告(1)
- java的视频案例教学 值得下载
- keil5库文件安装失败_iPad iPhone如何清理垃圾 iPad iPhone清理垃圾文件办法【详解】...
- 我的【藏羚头条】开发运营经验
- 基于Java+Swing实现天气预报系统
- 公链蓬勃发展——多链世界从理想走向现实 | 2021 区块链年报|Footprint Analytics
- 这所年轻大学,被誉为中国离科学最近的大学!
- 电脑开机后电脑连接正常几分钟后网络连接失败
- 【基于matlab的mqam调制与解调系统】
- 深度学习中,人们常说的鲁棒性和泛化性是什么意思?通俗的给你解释清楚,一看你就明白了。
- Linner和WebStorm前端开发环境搭建
- 矩阵论基础知识5(病态矩阵与条件数 )
- unknown error: Element <div data-v-41264f4a=““ class点击标签会返回新页面数据的获取对应数据的正确做法
热门文章
- 生意是真的不好做,办卡是真的风险特别大!
- electron 无法复制粘贴问题
- Apple ID 密码规则
- 韩译中难吗,如何做好韩语翻译
- java 获取bean_spring如何获取bean的6种方法,你知道几个?
- 树莓派网络监控(官方64位系统+docker+motioneye+内网穿透)
- php json 驼峰 下划线,Go语言json编码驼峰转下划线、下划线转驼峰
- vue自定义指令之手写v-loading指令
- 2017福州大学面向对象程序设计课程作业六
- linux 如何查看端口被哪个进程占用,如何查看linux端口被哪个进程占用