POJ 1185 炮兵阵地 状压dp
http://poj.org/problem?id=1185
经典题目不必多说,直接贴代码。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 6 int n, m, cnt, size; 7 int a[110], st[70], ct[70]; 8 char str[15]; 9 int f[110][70][70]; 10 void init() 11 { 12 size = 0; 13 int maxn = 1 << m; 14 for (int i = 0; i < maxn; i++){ 15 if (!(i&(i<<2)) && !(i&(i<<1))){ 16 st[size] = i; 17 ct[size] = 0; 18 int tmp = i; 19 while(tmp) tmp = tmp&(tmp-1), ct[size]++; 20 size++; 21 } 22 } 23 } 24 int main() 25 { 26 scanf("%d %d", &n, &m); 27 for (int i = 1; i <= n; i++){ 28 scanf("%s", str); 29 a[i] = 0; 30 for (int j = 0; j < m; j++){ 31 if (str[j] == 'H') a[i] |= 1 << j; 32 } 33 } 34 init(); 35 memset(f, 0, sizeof(f)); 36 for (int j = 0; j < size; j++){ 37 if (!(a[1]&st[j])) f[1][j][0] = ct[j]; 38 } 39 for (int i = 2; i <= n; i++){ 40 for (int j = 0; j < size; j++){ 41 if (a[i]&st[j]) continue; 42 for (int k = 0; k < size; k++){ 43 if (a[i-1]&st[k]) continue; 44 if (i == 2){ 45 if (!(st[j]&st[k])) 46 f[i][j][k] = max(f[i][j][k], f[i-1][k][0] + ct[j]); 47 } 48 else for (int l = 0; l < size; l++){ 49 if (!(a[i-2]&st[l]) && !(st[j]&st[k]) && !(st[j]&st[l]) && !(st[k]&st[l])) 50 f[i][j][k] = max(f[i][j][k], f[i-1][k][l] + ct[j]); 51 } 52 } 53 } 54 } 55 int ans = 0; 56 for (int j = 0; j < size; j++) 57 for (int k = 0; k < size; k++) 58 ans = max(ans, f[n][j][k]); 59 printf("%d\n", ans); 60 return 0; 61 }
转载于:https://www.cnblogs.com/james47/p/3900231.html
POJ 1185 炮兵阵地 状压dp相关推荐
- POJ - 1185 炮兵阵地(状压dp)
题目链接:点击查看 题目大意:中文题,题意很清晰,不多赘述 题目分析:最基础的状压dp,需要考虑如何转移,因为每一个炸弹所涉及的范围都是上下左右两个格子,我们可以从第一行开始向下转移,这样某一行的状态 ...
- POJ 1185 炮兵阵地 (状压DP)
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14869 Accepted: 5575 Description ...
- 洛谷P2704 [NOI2001]炮兵阵地(状压dp)
题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P&quo ...
- POJ 1185 炮兵阵地(状态压缩DP)
Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用&quo ...
- POJ1185 炮兵阵地 状压DP
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 31819 Accepted: 12295 Descriptio ...
- P2704 炮兵阵地 (状压dp入门题) 题解
题意简述:给定一个大小为n*m的棋盘,棋盘上'H'表示不可放置,'P'表示可放置,一个棋子在棋盘上的攻击范围是其左右上下2格以内,求不冲突情况下的最多摆放棋子数. 分析:决策是对于一个P格子考虑放或不 ...
- 【状态dp】poj 1185 炮兵阵地(三维dp)
poj 1185 炮兵阵地 http://poj.org/problem?id=1185 问题描述:给你一个n行m列的P-H矩阵,H表示不能安置炮兵,1可以安置炮兵,要求炮兵攻击管辖内不能在安置其他炮 ...
- POJ 1185 炮兵阵地 【状压DP】
<题目链接> 题目大意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平 ...
- POJ - 3254 Corn Fields(状压dp)
题目链接:点击查看 题目大意:给出一个n*m的地图,有些位置不能放牧,然后放牧的条件是相邻两个格子不允许同时使用,问可行方案有几种 题目分析:因为给出的数据范围很小,并且放牧的状态是放或者不放,很容易 ...
最新文章
- Python Qt GUI设计:QDrag拖拽数据传输类(基础篇—18)
- 机器人第一次独立手术!最快55分钟缝合肠道,华裔教授带队研发,“结果显著优于外科医生”...
- Yii 框架学习--03 多应用多模块
- node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...
- 计算机安装操作系统的目的是什么,安装计算机操作系统.doc
- android 360旋转动画,ANDROID——仿360手机卫士的旋转打分控件
- 四维的王坚和三维的阿里互联网汽车
- AJAX JSON之讲解
- java.io.FileNotFoundException: ...\ibs\library-1.0.17.jar (系统找不到指定的文件。)
- 基于vue-cli的快速开发框架
- 用大前端技术实现的一款仿Boss直聘app(已开源)
- js中去除字符串中所有的html标签
- 生产系统仿真软件,实现数字化工厂的利器!
- 中兴B860AV1.1_机顶盒_(4G和8G版)刷机固件升级和教程
- 大一计算机引论知识点,计算机引论知识点2015.doc
- AD使用技巧 内附AD18下载地址
- 树莓派3B+(无显示器)实现串口登录
- tp ajax 搜索分页
- 【无人机】基于fmincon实现无人机二维路径规划附matlab代码
- 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成
热门文章
- JZOJ 5987. 【WC2019模拟2019.1.4】仙人掌毒题
- 适合打游戏的计算机内存品牌型号,玩游戏电脑内存要多大合适?不同内存容量玩游戏区别实测...
- 塞尔达 amiibo数据_塞尔达传说:旷野之息Amiibo道具制作_碧海风云
- 最短路上的统计(Floyd)
- Codeforces 1344F Piet's Palette (线性代数、高斯消元)
- λ-矩阵(不变因子)
- golang适合做什么_什么八字适合做销售 适合做销售的八字特征
- 公共互联网网络安全突发事件应急预案_安徽新规:发生重大突发事件,官方5小时内必须发声...
- HDU - 2612 Find a way(BFS搜索)
- 小程序中实现滚动字幕