典型的状态压缩题,只是要定义dp[i][j][k],

#include<bits/stdc++.h>using namespace std;

int n,m,state[1<<10],tot=0;

int dp[110][66][66],sum[1<<10],mp[110];

int getsum(int x){    int cnt=0;    while(x){        if(x&1) cnt++;        x>>=1;    }    return cnt;}

bool check(int x){    if(x&(x>>1)) return 0;    if(x&(x>>2)) return 0;    return 1;}

int main(){    memset(dp,0,sizeof(dp));    scanf("%d%d",&n,&m);    for(int i=0;i<(1<<m);i++){        if(check(i))         {            state[++tot]=i;            sum[tot]=getsum(i);        }    }    for(int i=1;i<=n;i++) for(int j=0;j<m;j++)    {        char ch=getchar();        while(ch!='P' && ch!='H') ch=getchar();        if(ch=='H') mp[i]+=(1<<(m-1-j));    }    //处理第一行     for(int i=1;i<=tot;i++){        if(state[i]&mp[1]) continue;        dp[1][i][0]=sum[i];    }    //处理第二行    for(int i=1;i<=tot;i++){        if(mp[2]&state[i]) continue;        for(int j=1;j<=tot;j++){            if(mp[1]&state[j]) continue;            if(state[i]&state[j]) continue;            dp[2][i][j]=max(dp[2][i][j],dp[1][j][0]+sum[i]);        }    }

    for(int i=3;i<=n;i++){        for(int k1=1;k1<=tot;k1++){            if(state[k1]&mp[i]) continue;            for(int k2=1;k2<=tot;k2++){                if(state[k2]&mp[i-1]) continue;                if(state[k2]&state[k1]) continue;                for(int k3=1;k3<=tot;k3++){                    if(state[k3]&mp[i-2]) continue;                    if(state[k3]&state[k2]) continue;                    if(state[k3]&state[k1]) continue;                    dp[i][k1][k2]=max(dp[i][k1][k2],dp[i-1][k2][k3]+sum[k1]);                }            }        }    }    int ans=0;    for(int i=1;i<=tot;i++){        for(int j=1;j<=tot;j++){            ans=max(ans,dp[n][i][j]);        }    }    printf("%d",ans);    return 0;}

i指所在的行号,j指当前行的状态,k指上一行的状态

转载于:https://www.cnblogs.com/plysc/p/10300301.html

洛谷p2704 炮兵阵地相关推荐

  1. 洛谷 P2704 炮兵阵地 题解

    洛谷 P2704 炮兵阵地 题解 洛谷 P2704 题目 司令部的将军们打算在NNNMMM的网格地图上部署他们的炮兵部队.一个NNNMMM的地图由NNN行MMM列组成,地图的每一格可能是山地(用&qu ...

  2. C++ 洛谷 P2704 [NOI2001]炮兵阵地

    P2704 [NOI2001]炮兵阵地 没学状压DP的看一下 此题意思很简单,如下图,就是十字架上的不能有两个点放炮兵. 在做此题前,先做一下玉米田 玉米田题解 分析: 而m即一行的个数小于等于10, ...

  3. 洛谷 P2704 [NOI2001]炮兵阵地

    题目 题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P& ...

  4. 洛谷P2704 [NOI2001]炮兵阵地(状压dp)

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P&quo ...

  5. P2704 炮兵阵地 (状压dp入门题) 题解

    题意简述:给定一个大小为n*m的棋盘,棋盘上'H'表示不可放置,'P'表示可放置,一个棋子在棋盘上的攻击范围是其左右上下2格以内,求不冲突情况下的最多摆放棋子数. 分析:决策是对于一个P格子考虑放或不 ...

  6. 2022-5-20 吃月饼(something wrong), 数塔取数问题, 制铁棒, 子段统计, 炮兵阵地

    1. 吃月饼 有一块月饼,是正三角形的,又被分割成了许多块小正三角形的月饼,里面有若干块被吃掉了.现在想要在这块月饼中再找一个由小正三角形月饼的正三角形月饼,而且要求面积最大的. 样例解释: 大月饼的 ...

  7. jzoj1768,P2704,POJ1185-[NOI2001]炮兵阵地【状态压缩dp】

    正题 POJ链接:http://poj.org/problem?id=1185 jzoj链接:https://jzoj.net/senior/#main/show/1768 洛谷评测记录:https: ...

  8. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II

    文章目录 --2020年12月20日(周日)------------------ 状压DP 一.最短Hamilton路径(模板题) 二.玉米田(P1879 [USACO06NOV]Corn Field ...

  9. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

最新文章

  1. 轻松搞定c++语言pdf_当年锤子的大爆炸,如今12个语言版本都可轻松搞定!
  2. HIGHGUI ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
  3. 股票交易应用系统的性能分析工具介绍(一)
  4. 中国农业银行数据中心智能布线系统
  5. C++ 类和对象(一):类的概念、类的访问控制和封装、类对象模型、this指针
  6. 【学习笔记】线性规划与对偶问题和LP对偶费用流([ZJOI2013]防守战线题解)
  7. 操作系统之文件管理:2、文件的逻辑结构(有结构文件、无结构文件、顺序文件、索引文件、索引顺序文件)
  8. 100万并发连接服务器笔记之准备篇
  9. React 进修之路(1)
  10. 项目经理,别让猴子跳回背上!
  11. Unity直接调用Python脚本
  12. 《产品经理面试攻略》PART 1:产品经理入门
  13. 【5G】5G中的CU和DU是什么?
  14. css 首行缩进两字符
  15. Unity3D 太空射击游戏学习笔记
  16. Linux移植Windows摄像头驱动,Arm-Linux摄像头驱动程序的移植
  17. Ubuntu终端中字体颜色含义
  18. iPhone7 plus分辨率行不行
  19. 云服务器ECS常见的计费方式
  20. ecshop小京东短信接口插件修改-v41,42,43,50+图片说明

热门文章

  1. 如何使用Visual studio C++(VC++)编译C?图解,详!!!
  2. 时序约束基础 和 quartusII 中的设置
  3. BSS段 data段 text段 堆heap 和 栈stack
  4. 在Perl程序中显示进度条之多姿多彩的自写代码
  5. Pyhton类、实例属性的获取和设置
  6. 【Transformer】SOFT: Softmax-free Transformer with Linear Complexity
  7. 机器学习 凝聚态物理_机器学习遇到了凝聚的问题
  8. 夫妻两人同一个银行各自存50万,银行破产了该赔多少?
  9. 信用非常良好,为何银行不给你批信用卡?
  10. 单片机小白学步系列(三) 偶遇51单片机