农夫约翰的土地由M*N个小方格组成,现在他要在土地里种植玉米。

非常遗憾,部分土地是不育的,无法种植。

而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边缘。

现在给定土地的大小,请你求出共有多少种种植方法。

土地上什么都不种也算一种方法。

输入格式

第1行包含两个整数M和N。

第2..M+1行:每行包含N个整数0或1,用来描述整个土地的状况,1表示该块土地肥沃,0表示该块土地不育。

输出格式

输出总种植方法对100000000取模后的值。

数据范围

1≤M,N≤121≤M,N≤12

输入样例:

2 3
1 1 1
0 1 0

输出样例:

9

题意:该题是一道棋盘类压缩DP问题,玉米周围的四个格子不能再种玉米,且坏的土地不能再种玉米。

思路:可以发现每一行的状态只与前一行的状态有关,因此可以根据倒数第二行的状态来划分集合。这里只要第i行状态a和第i-1行状态b满足a&b==0即可。

然后再用一个数组g[N] 来记录坏的土地,在行内判断当前状态是否有换的土地,有则跳过即可。

代码:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>using namespace std;const int  N=14,M=1<<12,mod=100000000;vector<int> state;
vector<int> head[M];
int f[N][M];
int g[N];int n,m;//检查当前行的状态是否满足要求
bool check(int state)
{for(int i=0;i<m-1;i++)if((state>>i&1) && (state>>i+1&1))return false;return true;
}int main()
{cin>>n>>m;//记录坏的土地for(int i=1;i<=n;i++)for(int j=0;j<m;j++){int c;cin>>c;g[i]+=!c<<j;}//预处理满足要求的土地for(int i=0;i<1<<m;i++)if(check(i)){state.push_back(i);}//预处理状态转换for(int i=0;i<state.size();i++)for(int j=0;j<state.size();j++){int a=state[i],b=state[j];if((a&b)==0) head[i].push_back(j);}f[0][0]=1;for(int i=1;i<=n+1;i++)for(int a=0;a<state.size();a++)for(int b:head[a]){if(g[i]&state[a]) continue;f[i][a]=(f[i][a]+f[i-1][b])%mod;}cout<<f[n+1][0]<<endl;return 0;}

状态压缩Dp模板-玉米田相关推荐

  1. AcWing 327. 玉米田(状态压缩DP)

    AcWing 327. 玉米田(状态压缩DP) 一.问题 二.分析 1.思路 2.状态表示 3.状态转移 4.循环设计 5.初末状态 三.代码 一.问题 二.分析 1.思路 这道题与之前所讲解的AcW ...

  2. 327 玉米田(状态压缩dp)

    1. 问题描述: 农夫约翰的土地由 M×N 个小方格组成,现在他要在土地里种植玉米.非常遗憾,部分土地是不育的,无法种植.而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边 ...

  3. 状态压缩DP AcWing算法提高课 (详解)

    基础课的状态压缩点这里 基础课中 蒙德里安的梦想 属于 棋盘式状态压缩dp,最短Hamilton路径 属于 集合状态压缩dp 1064. 小国王(棋盘式/基于连通性) 这种棋盘放置类问题,在没有事先知 ...

  4. 第一章 动态规划 状态压缩DP

    1.基本概述 状态压缩dp和状态机一样,都是一种特殊的状态表示方式.状态机用一系列小状态表示某一状态.状态压缩dp用二进制数进行表示.虽然看代码起来时间复杂度比较高,但是很多的情况都给剪枝掉了. 状态 ...

  5. 动态规划-状态压缩DP

    [SCOI2005] 互不侵犯 题目描述 https://www.luogu.com.cn/problem/P1896 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它 ...

  6. 动态规划(5)状态压缩dp

    一.概述 动态规划的过程是随着阶段不断增长,在每个状态维度上不断扩展.在任意时刻,已经求出最优解的状态与尚未求出最优解的状态在各维度上的分界点组成了dp扩展的轮廓,对于某些问题,我们需要在动态规划的状 ...

  7. 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)

    目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...

  8. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  9. BZOJ1688|二进制枚举子集| 状态压缩DP

    Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...

最新文章

  1. 如何区分网线是几类的_认清网线的六种材质,挑选网线不再被坑
  2. 巧用拦截器:高效的扩展点设计
  3. CodePlex关闭,建议迁移至GitHub
  4. 阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云
  5. 循环语句:For循环
  6. android 语音阅读软件,语音阅读器APP
  7. android一格一格向上的进度条,如何 使用 ProgressBar 进度条
  8. sublime text 3 package control
  9. 如果降低sbus总线的传输速率/帧率,sbus怎样转UART,sbus接到4G
  10. 解决Intellij IDEA 通过archetype创建Maven项目缓慢的问题
  11. 性能测试知多少----性能测试分类之我见
  12. 入职直接给事业编, 90万补贴+50万科启,重庆高校
  13. 有关结合律和优先规律
  14. 基于python的垃圾分类程序,提供数据集(pytorch开发)
  15. 2021自学考试计算机应用基础,2021年高等教育自学考试计算机应用基础试题及答案.doc...
  16. Large Scale Spectral Clustering with Landmark-Based Representation
  17. 数据库类型为BLOB图片,前台显示问题。
  18. 深信服 2022届校园招聘 C++笔试编程题目
  19. 《Test-Driven Development for Embedded C》读书笔记(三)
  20. 【quill-editor】富文本编辑器对图片的放大缩小拖拽的实现

热门文章

  1. php日志写什么内容,Monolog-PHP日志类库介绍
  2. 软件测试之第三方快捷支付_支付宝遭遇最强对手:银联正面PK快捷支付
  3. JAVA使用JCO实现调用SAP接口方法
  4. MATLAB新手简明使用教程(七)——使用matlab建立多项式以及求导,商求导乘积求导等——新手来看,保证看懂。
  5. Java动态代理原理分析
  6. 【附源码】计算机毕业设计java在线学习系统设计与实现
  7. C语言一些常用结点和结点操作
  8. Hash 哈希 PTA 相关题目解析
  9. 顾客满意度意义与作用
  10. matlab白光干涉,matlab白光干涉