好吧,虽然它是道板子题,但我还是做了很久,wa了n发,主要还是不能很清晰的整理思路,并且多组样例的清空也总是有遗漏。。。(真是个菜鸡)

链接:登录—专业IT笔试面试备考平台_牛客网
n*m的土地,要求安放士兵,其上下左右不能有其他士兵,并且只有地图上标为1的位置才能放士兵。

首先不难想到要用状压dp来做。

因为数据范围这么小,答案的量又这么大,并且每一行的每一个位置都会影响下一行的决策。所以我们用01串来压缩状态。(不妨用1来代表士兵,0来代表不妨士兵)

对于每一行的01串(设为st)要考虑这么几个因素:

1.st当中不能有2个相邻的1,代表不存在两个左右相邻的士兵。

2.st与上一行不能在同一个位置同时有1,代表不存在两个上下相邻的士兵。

3.st中有1的位置,地图中对应的地方也一定是1。

用代码来表示的话,分别是:

1.if((i&(i<<1))) continue;
(或者:if((i&(i>>1))) continue;
2.if(st&st1) continue;//st1代表上一行的状态
3.if((st&mas[i])!=st) continue;//与地图进行对比 

然后其实也就差不多了,注意一下多组样例的清空。

我一般是选择用一个vector来存放合法状态,所以要么我就应该在最外面做好预处理,然后内部每次取合法状态的时候注意一下与上界的对比,要么就每次把vector清空,重新记录。

然而我一开始都没做。。。

另外为了优化一下,可以用01串来表示地图,这样也方便我们用位运算来处理。

以上就是所有细节了

然后我们就可以快乐ac了!

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,x,ans;
ll mas[14];
vector<ll> vt;
ll dp[14][(1<<13)+10];
#define N 100000000
void init(){ans=0;memset(mas,0,sizeof mas);memset(dp,0,sizeof dp);dp[0][0]=1;vt.clear();//多组样例这个东西也要清空啊啊啊啊啊啊啊啊!!!!!
}
int main()
{while(cin>>n>>m){init();for(ll i=1;i<=n;++i){for(ll j=1;j<=m;++j){cin>>x;mas[i]*=2;mas[i]+=x;//化成01串 }}for(ll i=0;i<(1<<m);++i){//if(!(i&(i<<1))&&!(i&(i>>1))) vt.push_back(i);if((i&(i<<1))) continue;//   if((i&(i>>1))) continue;vt.push_back(i);}for(ll i=1;i<=n;++i){for(ll st:vt){//枚举这一行 //if((st|mas[i])!=mas[i]) continue;//与地图进行对比 if((st&mas[i])!=st) continue;//与地图进行对比 for(ll st1:vt){//枚举上一行 //  if(st==st1) continue;if(st&st1) continue;dp[i][st]+=dp[i-1][st1];dp[i][st]%=N;}}}for(ll i:vt){ans+=dp[n][i];ans%=N;}cout<<ans<<endl;}return 0;
}

状压dp板子 德玛西亚万岁相关推荐

  1. 牛客网 德玛西亚万岁 状压DP

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

  2. NC15034 德玛西亚万岁(状压dp)

    链接:https://ac.nowcoder.com/acm/problem/15034 题目描述 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀.职责的意识 ...

  3. 德玛西亚万岁-----状压dp

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

  4. 德玛西亚万岁(状压DP)

    题目链接:点击打开链接 题意:给你一个n*m的矩阵,0代表不可以站人,1代表可以站人,并且相邻的格子之间不能站人(上下左右四个方向).问有多少种站人的方法. 题解:一行一行的处理.找出第一行的的所有状 ...

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

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

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

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

  7. [NC15034]德玛西亚万岁

    状压dp 第一次写状压dp的题目,可能是因为这种类型的比较难吧,所以是第一次做到. 题解: 我们可以用二进制来描述方格,1表示有德玛西亚,0表示没有. 样例1中第一行的三个方格都可以站人 一共有五种情 ...

  8. 【每日一题】6月3日德玛西亚万岁

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

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

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

最新文章

  1. CentOS 7 yum 安装 MySQL5.7
  2. POJ1143 Number Game(DP)
  3. linux2.6.37内核接两个硬盘导致读写效率变低的问题
  4. 有关ftp4j的FTPListParseException异常
  5. xcode代码没颜色的解决方案
  6. 角色动作系统概述:战斗、3C相关
  7. 嵩天-Python语言程序设计程序题--第一周:Python基本语法元素
  8. java多线程 sycophantic_Java多线程volatile和synchronized总结
  9. oracle修改undo清理时间,修改Oracle的Undo文件的方法
  10. mysql锁表和解锁语句
  11. 配置 IPsec *** and Internet Using Split Tunneling
  12. 我是如何寻找数据集的,一些个人私藏
  13. leetcode题库124-- 二叉树中的最大路径和
  14. L1-002. 打印沙漏-PAT团体程序设计天梯赛GPLT
  15. html5光标进去默认值消失,html点击input没有出现光标怎么办
  16. 台达plc读取变频器电流案例_PLC模拟量信号如何转换,编程必懂!
  17. 基于Cocos2d-x开发guardCarrot--3 《保卫萝卜2》主页面开发(仅使用Cocos2d-x)
  18. VS2012下MFC程序的换肤(Skin++、SkinMagic、USkin、SkinSharp)
  19. reviewboard升级
  20. Android学习日志1---在AndroidStudio启动Android 模拟器(ADV)发生的失败

热门文章

  1. C++面经之应届生找工作的“狗日”过程记录
  2. 青岛不倒你不倒,雪花不飘你不飘
  3. 【ENVI】landsat7去条带后栅格图像分离
  4. 查询各个班级男生女生个数(case)
  5. chrome , firefox 在线看迅雷电影
  6. 计算机软件删除了怎么恢复,卸载的软件怎么恢复,详细教您电脑卸载的软件怎么恢复...
  7. 【总结】1277- 重学 TypeScript 系列教程
  8. AIDMA VS AISAS vs ISMAS 营销法则
  9. [ 数据结构 -- 手撕排序算法第二篇 ] 冒泡排序
  10. 小女生的Linux技术~~~Linux面试题汇总答案~~