状态DP中很经典的一道题,除了从牛变成人之后好像就没什么变化了吧。
可以预处理出同一行内不会相邻的所有状态。
地图的每一行的01互换后,用一个数字储存。
对于每一个状态,若其与地图&运算的结果不为0,则说明有英雄站在不合法的地方了。
状态的转移则是枚举相邻两行间的状态,若相与为0,则可转移。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2<<13;
const int maxm=150005;
const int mod=100000000;
int n,m,siz;
int hang[13];
ll dp[13][maxn];
vector<int> leg;bool legal(int num){for(int i=0;i<m-1;i++){if(((1<<i)&num)&&((1<<(i+1))&num))return 0;}return 1;
}int cc;
int main(){while(~scanf("%d%d",&n,&m)){leg.clear();memset(dp,0,sizeof(dp));int upper=(1<<m) -1;for(int i=0;i<upper;i++){if(legal(i))leg.push_back(i);}siz=leg.size();for(int i=0;i<n;i++){hang[i]=0;for(int j=0;j<m;j++){scanf("%d",&cc);if(cc==0){hang[i]+=(1<<j);}}}for(int i=0;i<siz;i++){int u=leg[i];if(hang[0]&u)continue;else dp[0][u]=1;}for(int i=0;i<n-1;i++){for(int j=0;j<siz;j++){int u=leg[j];if(dp[i][u]==0)continue;for(int k=0;k<siz;k++){int v=leg[k];if(u&v)continue;if(hang[i+1]&v)continue;dp[i+1][v]=(dp[i+1][v]+dp[i][u])%mod;}}}ll ans=0;for(int i=0;i<siz;i++){int u=leg[i];ans=(ans+dp[n-1][u])%mod;}printf("%d\n",ans);}return 0;
}

nowcoder 多校算法寒假训练营(第二场)F 德玛西亚万岁(状压DP,位运算)相关推荐

  1. F-德玛西亚万岁(状压DP)(2018年全国多校算法寒假训练营练习比赛(第二场))

    题目链接:     https://www.nowcoder.com/acm/contest/74/F 题目大意: 给你n*m大小的棋盘,其中1可以放置英雄,0不能放置.而放置英雄的格子的上下左右不能 ...

  2. 2018年全国多校算法寒假训练营练习比赛(第二场)F - 德玛西亚万岁

    链接:https://www.nowcoder.com/acm/contest/74/F 来源:牛客网 题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣 ...

  3. 2018年全国多校算法寒假训练营练习比赛(第二场) F.德玛西亚万岁(状压动归)

    题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史.这里非常重视正义.荣耀.职责的意识形态,这里的人民为此感到强烈自豪.有一天他们想去制裁邪恶的比尔吉沃特,于是派遣了自己最优秀的 ...

  4. 2018年牛客多校算法寒假训练营练习比赛(第二场)F.德玛西亚万岁 (状压DP

    题目链接 题意:给你一个n*m的矩阵,0代表不可以站人,1代表可以站人,并且相邻的格子之间不能站人(上下左右四个方向).问有多少种站人的方法. 考虑每一行,便利每一种状态,在当前行的基础上,维护下一行 ...

  5. 2018年全国多校算法寒假训练营练习比赛(第二场) F 德玛西亚万岁(状态压缩DP 未解决)

    题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀.职责的意识形态,这里的人民为此感到强烈自豪. 有一天他们想去制裁邪恶的比尔吉沃特,于是派遣了自己最优 ...

  6. 【题集】牛客网·2018年全国多校算法寒假训练营练习比赛(第二场)

    原文链接:2018年全国多校算法寒假训练营练习比赛(第二场) A 吐泡泡 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Form ...

  7. 【题集·待解决】牛客网·2018年全国多校算法寒假训练营练习比赛(第二场)

    原文链接:2018年全国多校算法寒假训练营练习比赛(第二场) A 吐泡泡 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Form ...

  8. 2018.1.28 牛客网2018年全国多校算法寒假训练营练习比赛题解

    Pre:DP专场,不得不说出题人脑洞真的大,题目质量真心不错.能将当今比较热门的游戏素材与算法竞赛有机结合,也是肥肠因缺斯汀的呀哈哈哈哈~ 打的最有意思也是最扎心的一场比赛,还是自己菜.DP是需要下慢 ...

  9. 2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲

    2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲 题目链接 做法:模拟即可 #include <bits/stdc++.h> #define P pair<int,in ...

最新文章

  1. UNIX再学习 -- 内存管理
  2. 设置宿舍路由器为多账号登录的方法
  3. OpenCV学习笔记二
  4. html5 txt文件上传,JavaScript html5利用FileReader实现上传功能
  5. java之写接口回调编程经验改进
  6. 判断一个程序员水平高低的标准?
  7. linux查看基础硬件信息
  8. Linux系统挂起进程的几种方法
  9. Nginx进程以及事件处理模型
  10. java声明一个函数_java – 如何声明一个函数参数来接受抛出的函数?
  11. 异常:Error resolving template “xxx“, template might not exist or might not be accessible...解决办法
  12. tensor索引[..., 0]
  13. The NVIDIA driver on your system is too old (found version 9000).
  14. Windows XP刻录机不能刻盘显示函数不正确的解决办法
  15. 计算机三级网络技术无纸化考试模拟软件(2019.3 2019.9) 包含激活码 未来教育
  16. 关于对话机器人,你需要了解这些技术
  17. [计算机系统-01] 计算机系统漫游
  18. tinymce 富文本限制字数 超出不显示
  19. 图像形状及数量识别(matlab实现)
  20. 【Matlab】MATLAB矩阵处理

热门文章

  1. 小米3支持 4G网络吗
  2. Python之pytest单元测试方法
  3. gee去云处理Landsat、Sentinel和Modis影像
  4. zz谷村新司《星》(昴)日文歌词 中文歌词及随感一则
  5. python编程工具jurtbook_推荐7款好用的Python工具!
  6. .NET Core on K8S快速入门课程--学习笔记
  7. toad如何导出导入单个表的数据
  8. 好看颜色搭配集合——matplotlibPPT画图可用
  9. iTunes Connect相关
  10. c语言如何给电脑取名字,给我的C程序起个名字!!