题目

传送门:QWQ

分析

看到$ M<=10 $考虑状压。

然后把每行都压一下,那么每个状态相关的就是上一行和上上行的状态。

然后枚举。

然后复杂度最坏是$ O(100 \times 1024^3) $的

仔细分析一下,有很多状态是无用的,但还是被判断了,比如$ 11111 $,显然不能做到不误伤。

那么我们把所有可能的状态拉出来(据说小于70?),即代码中的$ st $数组

然后用$ dp[i][j][k] $ 表示前i行上行状态st[j]本行状态st[k]的最大炮兵数量

然后就可以通过上行和上上行很快的更新了

最后统计答案时把最后一行每个位置都要算一下。

代码

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=;
int all[maxn], dp[][][], num[];
int ans=-1e9, ks=, n, m, st[maxn], sum[maxn], cnt;
char map[maxn][maxn];
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%s",map[i]);
for(int j=;j<m;j++){
if(map[i][j]=='H') all[i]|=(<<j);
}
}
for(int i=;i<=;i++){
for(int j=i;j;j>>=) if(j%) num[i]++;
}
for(int i=;i<(<<m);i++) //预处理出一行可能的状态
if(!(i&(i<<)) && !(i&(i<<))) st[++cnt]=i,sum[cnt]=num[i];
for(int i=;i<=cnt;i++) if(!(st[i]&all[])) dp[][][i]=sum[i];
int ans=;
//dp[i][j][k]前i行上行状态st[j]本行状态st[k]
for(int i=;i<n;i++){
for(int j=;j<=cnt;j++){
for(int k=;k<=cnt;k++){
if(st[j]&st[k]) continue;
for(int l=;l<=cnt;l++){
if(!(st[j]&st[l])&&!(st[k]&st[l])&&!(st[l]&all[i+])){
dp[i+][k][l]=max(dp[i+][k][l], dp[i][j][k]+sum[l]);
}
}
}
}
}
for(int i=;i<=cnt;i++)
for(int j=;j<=cnt;j++)
ans=max(ans,dp[n][i][j]);
printf("%d",ans);
return ;
}

最新文章

  1. python--基础学习(五)参数位置传递、关键字传递、包裹传递及解包裹
  2. return 关键字的作用
  3. Hierarchical Softmax
  4. Installing Hadoop on Mac OSX Yosemite Tutorial Part 1.
  5. uploadify 自动访问url 初始化 自动请求
  6. reporting service &amp; wpf
  7. hdu5443(2015长春赛区网络赛1007)暴力
  8. 三大文本处理工具grep、sed及awk的简单介绍
  9. shell echo打印换行的方法
  10. cleartool mkview snapshot windows
  11. ECMAScript 发展历史
  12. Linux性能统计工具
  13. ssh的public key的使用
  14. Sublime Text 2快捷键大全
  15. beforeunload
  16. .net反混淆脱壳工具de4dot的使用
  17. Python-CSS入门
  18. C#重点内容之:事件(Event)
  19. 8.C#知识点:委托和事件
  20. spark-shuffle分析

热门文章

  1. 利用Html.css OPPO手机导航菜单的制作解析
  2. 对于应用之间的调用,如何选择rpc还是mq?
  3. UVA-11082 Matrix Decompressing (网络流建模)
  4. [转载]c语言指针segmentation fault 指针常常错误的小地方
  5. DOM之一些小实验demo
  6. Life Cycle(JSF+Facelets)
  7. 选择语句=》OO函数实现
  8. CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑等
  9. L3-014 周游世界 (30 分)
  10. 《DSP using MATLAB》Problem 2.14