POJ 1185 炮兵阵地 (状压DP)
题意 : 中文题不详述。
思路 :状压DP,1表示该位置放炮弹,0表示不放。dp[i][j][k],代表第 i 行的状态为k时第i-1行的状态为 j 时放置的最大炮弹数。只是注意判断的时候不要互相攻击到就可以了,还要与地形相适应。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std ; int dp[][][] ;
int sum[] ;
int sta[] ;
int mapp[] ;
char sh[][] ;
int num ;
int N,M ; int getsum(int x)
{
x=(x& 0x55555555)+((x>>)& 0x55555555);
x=(x& 0x33333333)+((x>>)& 0x33333333);
x=(x& 0x0F0F0F0F)+((x>>)& 0x0F0F0F0F);
x=(x& 0x00FF00FF)+((x>>)& 0x00FF00FF);
x=(x& 0x0000FFFF)+((x>>)& 0x0000FFFF);
return x;
}
//int getsum(int x)
//{
// int cnt = 0 ;
// while(x)
// {
// cnt ++ ;
// x &= x-1 ;
// }
// return cnt ;
//}
int main()
{
while(~scanf("%d %d",&N,&M) )
{
memset(dp,-,sizeof(dp)) ;
num = ;
for(int i = ; i <= N ; i++)
{
scanf("%s",sh[i]) ;
for(int j = ; j < M ; j++)
{
if(sh[i][j] == 'H')
mapp[i] |= ( << j) ;//把高原的地方标记一下
}
}
for(int i = ; i < ( << M) ; i++)//枚举所有可行的状态
{
if(i & (i << ) || i & (i >> ) || i & (i << ) || i & (i >> ))
continue ;
// cout<<i<<" ";
sum[num] = getsum(i) ;//求i状态中1的个数
sta[num++] = i ;//将该状态存到数组中
}
// cout<<endl;
for(int i = ; i < num ; i++)
{
if(sta[i] & mapp[]) continue ;
dp[][][i] = sum[i] ;
}
for(int i = ; i <= N ; i++)
{
for(int k = ;k < num ; k++)
{
if(mapp[i] & sta[k]) continue ;
for(int j = ; j < num ; j++)
{
if(sta[j] & sta[k]) continue ;
for(int h = ; h < num ; h++)
{
if(sta[h] & sta[k]) continue ;
if(sta[h] & sta[j]) continue ;
if(dp[i-][h][j] != -)
{
dp[i][j][k] = max(dp[i][j][k],dp[i-][h][j]+sum[k]) ;
}
}
}
}
}
int ans = ;
for(int j = ; j < num ; j++)
{
for(int k = ; k < num ; k++)
ans = max(ans,dp[N][j][k]) ;
}
printf("%d\n",ans) ;
}
return ;
}
POJ 1185 炮兵阵地 (状压DP)的更多相关文章
- POJ 1185 炮兵阵地 状压dp
题目链接: http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K 问题描述 司令部的将军们打算在N*M ...
- POJ 1185炮兵阵地 (状压DP)
题目链接 POJ 1185 今天艾教留了一大堆线段树,表示做不动了,就补补前面的题.QAQ 这个题,我第一次写还是像前面HDU 2167那样写,发现这次影响第 i 行的还用i-2行那样,那以前的方法就 ...
- poj - 1185 炮兵阵地 状压DP 解题报告
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21553 Accepted: 8363 Description ...
- [poj 1185] 炮兵阵地 状压dp 位运算
Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用&quo ...
- POJ1185 炮兵阵地 —— 状压DP
题目链接:http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions ...
- TZOJ 4912 炮兵阵地(状压dp)
描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...
- 洛谷P2704 [NOI2001]炮兵阵地 [状压DP]
题目传送门 炮兵阵地 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图 ...
- [POJ1185][NOI2001]炮兵阵地 状压DP
题目链接:http://poj.org/problem?id=1185 很裸的状压,考虑对于一行用二进制储存每一种的状态,但是状态太多了做不了. 观察到有很多状态都是不合法的,于是我们预处理出合法的状 ...
- luogu 2704 炮兵阵地 状压dp
状压的基础题吧 第一次看感觉难上天,后来嘛就.. 套路:先根据自身状态筛出可行状态,再根据地图等其他限制条件筛选适合的状态加入答案 f i,j,k 分别代表 行数,本行状态,上行状态,再累加答案即可 ...
- [NOI2001]炮兵阵地 状压DP
题面: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最多 ...
随机推荐
- 十一、从头到尾彻底解析Hash 表算法
在研究MonetDB时深入的学习了hash算法,看了作者的文章很有感触,所以转发,希望能够使更多人受益! 十一.从头到尾彻底解析Hash 表算法 作者:July.wuliming.pkuoliver ...
- centos rsync安装配置
安装 1 yum -y install rsync ---------------------服务器安装------------------------------- 创建基础配置文件 1 2 3 4 ...
- iOS学习之UITabBarController
一.标签视图控制器——UITabBarController 1.UITabBarController的继承关系: @interface UITabBarController : UIViewContr ...
- 【热门收藏】iOS开发人员必看的精品资料(100个)——下载目录
iPhone.iPad产品风靡全球,巨大的用户群刺激着iOS软件开发需求,然而国内人才缺口很大,正处于供不应求的状态,ios开发前景大好.我们整理了51CTO下载中心100份热门的ios开发资料,做了 ...
- phpstorm自动对齐数组=>,自动加空格
写完代码后可以点菜单中code-reformat code,快捷键是option+command+L
- Content Template & DataTemplate 区别
转一篇很好的博客: http://www.cnblogs.com/lzhp/p/3250786.html 介绍 listbox 的 Template.ItemsPanel.ItemContainerS ...
- 49.关于Quartus和ISE中ROM的初始化和仿真的一些小结
最近在玩Altera的FPGA,当我用Quartus II自带的IP核生成ROM时,出现了各种问题,于是在网上各种查资料,终于解决了我的问题.这里做一下小结,方便自己日后查阅. Quartus II ...
- 设置xx-net,访问youtube等国外网站
配合使用chrome+xx-net,就可以免费访问youtube等外网了.步骤如下: 1. 按照https://github.com/XX-net/XX-Net/wiki/%E4%BD%BF%E7%9 ...
- java implement
接口不能被实例化,但是可以声明一个接口类型的变量. eg. A implements B,则可以有B variableName = new A(),这和extends的用法是类似的 接口可被认为是纯抽 ...
- IOS之UIView的tag学习
tag是UIView的一个属性,而且要求tag值唯一.父视图可以通过tag来找到一个子视图 UIView *redView = [[UIView alloc]initWithFrame:CGRectM ...