nowcoder 多校算法寒假训练营(第二场)F 德玛西亚万岁(状压DP,位运算)
状态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,位运算)相关推荐
- F-德玛西亚万岁(状压DP)(2018年全国多校算法寒假训练营练习比赛(第二场))
题目链接: https://www.nowcoder.com/acm/contest/74/F 题目大意: 给你n*m大小的棋盘,其中1可以放置英雄,0不能放置.而放置英雄的格子的上下左右不能 ...
- 2018年全国多校算法寒假训练营练习比赛(第二场)F - 德玛西亚万岁
链接:https://www.nowcoder.com/acm/contest/74/F 来源:牛客网 题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣 ...
- 2018年全国多校算法寒假训练营练习比赛(第二场) F.德玛西亚万岁(状压动归)
题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史.这里非常重视正义.荣耀.职责的意识形态,这里的人民为此感到强烈自豪.有一天他们想去制裁邪恶的比尔吉沃特,于是派遣了自己最优秀的 ...
- 2018年牛客多校算法寒假训练营练习比赛(第二场)F.德玛西亚万岁 (状压DP
题目链接 题意:给你一个n*m的矩阵,0代表不可以站人,1代表可以站人,并且相邻的格子之间不能站人(上下左右四个方向).问有多少种站人的方法. 考虑每一行,便利每一种状态,在当前行的基础上,维护下一行 ...
- 2018年全国多校算法寒假训练营练习比赛(第二场) F 德玛西亚万岁(状态压缩DP 未解决)
题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀.职责的意识形态,这里的人民为此感到强烈自豪. 有一天他们想去制裁邪恶的比尔吉沃特,于是派遣了自己最优 ...
- 【题集】牛客网·2018年全国多校算法寒假训练营练习比赛(第二场)
原文链接:2018年全国多校算法寒假训练营练习比赛(第二场) A 吐泡泡 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Form ...
- 【题集·待解决】牛客网·2018年全国多校算法寒假训练营练习比赛(第二场)
原文链接:2018年全国多校算法寒假训练营练习比赛(第二场) A 吐泡泡 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Form ...
- 2018.1.28 牛客网2018年全国多校算法寒假训练营练习比赛题解
Pre:DP专场,不得不说出题人脑洞真的大,题目质量真心不错.能将当今比较热门的游戏素材与算法竞赛有机结合,也是肥肠因缺斯汀的呀哈哈哈哈~ 打的最有意思也是最扎心的一场比赛,还是自己菜.DP是需要下慢 ...
- 2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲
2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲 题目链接 做法:模拟即可 #include <bits/stdc++.h> #define P pair<int,in ...
最新文章
- UNIX再学习 -- 内存管理
- 设置宿舍路由器为多账号登录的方法
- OpenCV学习笔记二
- html5 txt文件上传,JavaScript html5利用FileReader实现上传功能
- java之写接口回调编程经验改进
- 判断一个程序员水平高低的标准?
- linux查看基础硬件信息
- Linux系统挂起进程的几种方法
- Nginx进程以及事件处理模型
- java声明一个函数_java – 如何声明一个函数参数来接受抛出的函数?
- 异常:Error resolving template “xxx“, template might not exist or might not be accessible...解决办法
- tensor索引[..., 0]
- The NVIDIA driver on your system is too old (found version 9000).
- Windows XP刻录机不能刻盘显示函数不正确的解决办法
- 计算机三级网络技术无纸化考试模拟软件(2019.3 2019.9) 包含激活码 未来教育
- 关于对话机器人,你需要了解这些技术
- [计算机系统-01] 计算机系统漫游
- tinymce 富文本限制字数 超出不显示
- 图像形状及数量识别(matlab实现)
- 【Matlab】MATLAB矩阵处理