xtu DP Training C.炮兵阵地
炮兵阵地
This problem will be judged on PKU. Original ID: 1185
64-bit integer IO format: %lld Java class name: Main

如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地形的影响。
现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。
Input
接下来的N行,每一行含有连续的M个字符('P'或者'H'),中间没有空格。按顺序表示地图中每一行的数据。N <= 100;M <= 10。
Output
Sample Input
5 4
PHPP
PPHH
PPPP
PHPP
PHHP
Sample Output
6
Source
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <climits>
#include <vector>
#include <queue>
#include <cstdlib>
#include <string>
#include <set>
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = ;
int state[],num[],dp[maxn][][],mp[maxn];
int r,c,cnt;
void preSolve(){
int i,j,temp,v = <<c;
memset(num,,sizeof(num));
for(cnt = i = ; i < v; i++){
temp = i;
if((temp&(temp<<))|(temp&(temp<<))) continue;
state[cnt] = temp;
while(temp){num[cnt] += temp&;temp >>= ;}
cnt++;
}
}
int go(){
int ans = ,i,j,k,t;
preSolve();
memset(dp,,sizeof(dp));
for(i = ; i < r; i++){
for(j = ; j < cnt; j++){
if(mp[i]&state[j]) continue;
if(i == ){
dp[i][j][] = num[j];
}else if(i == ){
for(k = ; k < cnt; k++){
if(state[j]&state[k]) continue;
dp[i][j][k] = max(dp[i][j][k],dp[i-][k][]+num[j]);
}
}else{
for(t = ; t < cnt; t++){
if(state[j]&state[t]) continue;
for(k = ; k < cnt; k++){
if(state[k]&state[j]||state[k]&state[t]) continue;
dp[i][j][t] = max(dp[i][j][t],dp[i-][t][k]+num[j]);
}
}
}
}
}
for(j = ; j < cnt; j++)
for(k = ; k < cnt; k++)
ans = max(ans,dp[r-][j][k]);
return ans;
}
int main(){
char str[];
int i,j;
while(~scanf("%d%d",&r,&c)){
for(i = ; i < r; i++){
scanf("%s",str);
mp[i] = ;
for(j = c-; j >= ; j--){
if(str[j] == 'H') mp[i] += <<(c-j-);
}
}
printf("%d\n",go());
}
return ;
}
xtu DP Training C.炮兵阵地的更多相关文章
- 状压dp(B - 炮兵阵地 POJ - 1185 )
题目链接:https://cn.vjudge.net/contest/276236#problem/B 题目大意:略 具体思路:和我的上一篇写状压dp的思路差不多,不过就是这个题相当于上一个题的升级 ...
- xtu DP Training B. Collecting Bugs
B. Collecting Bugs Time Limit: 10000ms Memory Limit: 64000KB 64-bit integer IO format: %lld Jav ...
- POJ 1185 炮兵阵地(状压DP)
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26426 Accepted: 10185 Descriptio ...
- POJ 1185 状态压缩DP 炮兵阵地
题目直达车: POJ 1185 炮兵阵地 分析: 列( <=10 )的数据比较小, 一般会想到状压DP. Ⅰ.如果一行10全个‘P’,满足题意的状态不超过60种(可手动枚举). Ⅱ.用DFS ...
- poj - 1185 炮兵阵地 状压DP 解题报告
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 21553 Accepted: 8363 Description ...
- [poj1185]炮兵阵地_状压dp
炮兵阵地 poj-1185 题目大意:给出n列m行,在其中添加炮兵,问最多能加的炮兵数. 注释:n<=100,m<=10.然后只能在平原的地方建立炮兵. 想法:第2到状压dp,++.这题显 ...
- POJ_1185_炮兵阵地 dp+状态压缩
题目:炮兵阵地 链接:http://poj.org/problem?id=1185 解题思路: 首先用 int 来表示每一行的情况,比如说第一行是k1,那么[ k1&(k1>>2) ...
- POJ 1185 炮兵阵地 状压dp
题目链接: http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K 问题描述 司令部的将军们打算在N*M ...
- poj1185 炮兵阵地【状压DP】
炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 32802 Accepted: 12650 Descriptio ...
随机推荐
- LIS 2015百度之星初赛2 HDOJ 5256 序列变换
题目传送门 题意:中文题面 分析:LIS(非严格):首先我想到了LIS,然而总觉得有点不对:每个数先减去它的下标,防止下面的情况发生:(转载)加入序列是1,2,2,2,3,这样求上升子序列是3,也就是 ...
- HTTP提交方式之PUT详细介绍及POST和PUT的区别
Http定义了与 服务器的交互方法,其中除了一般我们用的最多的GET,POST 其实还有PUT和DELETE 根据RFC2616标准(现行的HTTP/1.1)其实还有OPTIONS,GET,HEAD, ...
- 476 Number Complement 数字的补数
给定一个正整数,输出它的补数.补数是对该数的二进制表示取反.注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含前导零位.示例 1:输入: 5输出: 2解释: 5的 ...
- Dapper系列之三:Dapper的事务修改与删除
Dapepr的Update和Delete Dapper入门Dapper查询 上两篇文章我们介绍Dapper中添加和查询.本篇文章我们继续讲解修改和删除....如果本篇文章看不懂,请看阅读上两篇Dapp ...
- html5 input 标签
<!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content ...
- python工具之日志记录
''' 写日志类 日志存放目录为当前应用程序的目录下的log目录中 日志产生规则:每小时产生一个文件 write by :wujf 2017-02-24 ''' import sys import o ...
- 字符串、数组、json
一.字符串 string 1.字符串的定义: (1).var s="haha"; (2).var s=new string ("hello") 对象形式定义 2 ...
- HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法
基础内容 容器就是一种装其他各种对象的器皿.java.util包 容器:Set, List, Map ,数组.只有这四种容器. Collection(集合) 一个一个往里装,Map 一对一对往里装. ...
- appium学习链接记录
乙醇大师的园子: http://www.cnblogs.com/nbkhic/tag/appium/ webDriver java版 https://github.com/easonhan007/we ...
- vue项目中常用的一些公共方法
//校验手机号码 export function isSpecialPhone(num) { return /^1[2,3,4,5,7,8]\d{9}$/.test(num) } //校验中英文姓名 ...