题目

给定一个$n \times m$的$01$矩形,选择其中为$1$的位置,要求互不相邻,问方案数。

解决方案

直接dp因为状态较多,数组很难直接表示出来,我们采用二进制状态压缩存储。

用$dp[i][j]$表示第$i$行$j$状态的方案数,不难写出状态方程$dp[i][j] += dp[i-1][k]$,同时要求$j, k$内部没有相邻的1,$j, k$之间也没有相邻的1,最终答案只需累加第$i$行所有状态下的值.

 #include<cstdio>
using namespace std; const int mod = ;
int n, m;
int maze[];
int dp[][ <<]; bool judge(int i, int j)
{
if((maze[i] & j) != j) return false; //j只是maze[i]的一部分
if(j & (j << )) return false; //存在相邻的1
return true;
} void solve()
{
dp[][] = ;
for(int i = ;i <= n;i++) //枚举每一行
{
for(int j = ;j < ( << m);j++) //枚举第i行所有的状态
{
if(!judge(i, j )) continue;
for(int k = ;k < ( <<m);k++) //枚举第i-1行所有的状态
{
if(j & k) continue;
dp[i][j] = (dp[i][j] + dp[i-][k]) % mod;
}
}
}
int ans = ;
for(int i= ;i < ( << m);i++) ans = (ans + dp[n][i]) % mod;
printf("%d\n", ans);
} int main()
{
scanf("%d%d", &n, &m);
int tmp;
for(int i = ;i <= n;i++)
{
for(int j = ;j < m;j++)
{
scanf("%d", &tmp);
maze[i] = (maze[i] << ) + tmp; //注意位运算的优先级
}
} solve(); return ;
}

参考链接:https://blog.csdn.net/mengxiang000000/article/details/51075506

  

P3254——DP&&入门的更多相关文章

  1. poj 3254 状压dp入门题

    1.poj 3254  Corn Fields    状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...

  2. xbz分组题B 吉利数字 数位dp入门

    B吉利数字时限:1s [题目描述]算卦大湿biboyouyun最近得出一个神奇的结论,如果一个数字,它的各个数位相加能够被10整除,则称它为吉利数.现在叫你计算某个区间内有多少个吉利数字. [输入]第 ...

  3. 【dp入门题】【跟着14练dp吧...囧】

    A HDU_2048 数塔 dp入门题——数塔问题:求路径的最大和: 状态方程: dp[i][j] = max(dp[i+1][j], dp[i+1][j+1])+a[i][j];dp[n][j] = ...

  4. 数位dp入门 hdu2089 不要62

    数位dp入门 hdu2089 不要62 题意: 给定一个区间[n,m] (0< n ≤ m<1000000),找出不含4和'62'的数的个数 (ps:开始以为直接暴力可以..貌似可以,但是 ...

  5. POJ 2342 树形DP入门题

    有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...

  6. hdu3555 Bomb 数位DP入门

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 简单的数位DP入门题目 思路和hdu2089基本一样 直接贴代码了,代码里有详细的注释 代码: ...

  7. 【专章】dp入门

    动态规划(简称dp),可以说是各种程序设计中遇到的第一个坎吧,这篇博文是我对dp的一点点理解,希望可以帮助更多人dp入门. ***实践是检验真理的唯一标准,看再多文章不如自己动手做几道!!!*** 先 ...

  8. HDU 2084 数塔(简单DP入门)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  9. 树形dp 入门

    今天学了树形dp,发现树形dp就是入门难一些,于是好心的我便立志要发一篇树形dp入门的博客了. 树形dp的概念什么的,相信大家都已经明白,这里就不再多说.直接上例题. 一.常规树形DP P1352 没 ...

随机推荐

  1. IDEA插件之JProfiler

    1.是什么?来用干嘛的? 一个商业授权的Java剖析工具. 用来剖析程序内存.CPU使用情况,找到性能瓶颈,快速定位问题所在. 2.IDEA安装JProfiler插件 (1)File -> Se ...

  2. JS数据拷贝

    JS的拷贝可分为浅拷贝和深拷贝: 浅拷贝:如果数组元素是基本类型,就会拷贝一份,互不影响,而如果是对象或者数组,就会只拷贝对象和数组的引用,这样我们无论在新旧数组进行了修改,两者都会发生变化. 深拷贝 ...

  3. Ubuntu18.04中安装Python3.7教程

    Ubuntu18.04中安装Python3.7教程 链接https://blog.csdn.net/weixin_42056625/article/details/82970358

  4. Windows安全日志

    在运行中输入:eventvwr.msc,即可打开事件日志. 登录类型 描述 2 互动(键盘和屏幕的登录系统) 3 网络(即连接到共享文件夹从其他地方在这台电脑上网络) 4 批处理(即计划任务) 5 服 ...

  5. swiper手滑动轮播图后自动轮播失效解决办法

    设置autoplay:true之后,再设置 autoplay:{disableOnInteraction: false} --------------------------------------- ...

  6. java学习要想精炼掌握应运的必备知识(博文来源于网络)

    一: 编程基础 不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还是要有的.下面几篇文章从思想到实现,为你梳理出常用的数据结构和经典算法. 1-1 常用数 ...

  7. 简单分析BeanPostProcessor

    1. 什么是BeanPostProcessorBeanPostProcessor是一个接口,有两个方法,分别是:Object postProcessBeforeInitialization(Objec ...

  8. ggpubr进行“paper”组图合并,也许比PS,AI更简单

    本文转载自微信公众号 “生信补给站”,https://mp.weixin.qq.com/s/41iKTulTwGcY-dHtqqSnLA 多个图形进行组图展示,可以既展示一个“事情”的多个角度,也可以 ...

  9. 【Android】笔记

    一.环境搭建 1.  下载JDK, JRE , 设置JDK 和 JRE环境变量 , PATH C:\jdk1.6.0_15\bin; JAVA_HOME C:\jdk1.6.0_15 重启电脑,    ...

  10. Google自动打印

    浏览器打印功能,有很多小伙伴可能不太清楚,这里我们可以学习一下. 情景:开发一个需要打印小票的项目.(在订单页里,给客户添加一个打印的操作) 1.假设打印机已经连接好了 2.我们这一节用的浏览器是Go ...