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

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

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

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

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

输入格式
第1行包含两个整数M和N。

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

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

数据范围
1≤M,N≤12
输入样例:
2 3
1 1 1
0 1 0
输出样例:
9

思路:dp(i,j)表示已经种了i行且第i列的状态为j,状态为为二进制表示,1表示种0则没种,先预处理出合法的状态,再处理出每种合法状态可以由哪种状态转移来。每行坏掉的土地位置取1,记录出每行坏土地的二进制数p,之后枚举每行的每种状态时,当合法状态j与p相与若结果不为零,说明在某个坏土地上也进行了种植,则此状态也应该跳过。dp(m+1,0)就是最终答案,种了m+1行且最后一行没种。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <algorithm>
using namespace std;typedef long long ll;
ll mod = 1e8;int m,n;
int dp[15][10000];
int p[15];
vector<int> num,head[10000];bool check(int x)
{for(int i=0;i<m;i++){if((x>>i&1)&&(x>>(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 x;cin>>x;p[i]=p[i]<<1;p[i]+=(!x);}}for(int i=0;i<1<<m;i++){if(check(i))    num.push_back(i);}for(int i=0;i<num.size();i++)for(int j=0;j<num.size();j++){int a=num[i],b=num[j];if((a&b)==0)head[a].push_back(b);}dp[0][0]=1;for(int i=1;i<=n+1;i++){for(int j=0;j<num.size();j++){int now=num[j];if(now&p[i])    continue;for(int k=0;k<head[now].size();k++){dp[i][now]+=dp[i-1][head[now][k]];dp[i][now]%=mod;}}}cout<<dp[n+1][0]<<endl;int ab;cin>>ab;
}

ACWing 327. 玉米田(状态压缩dp入门)相关推荐

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

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

  2. acwing 327. 玉米田

    327. 玉米田 题意: m * n的土地,有的土地不育,有的可以种植,要求相邻的土地不能同时种植玉米,问有多少种种植方式 题解: 状压dp,先存每一行可能的状态,然后状态转移,注意相邻不能同时种植除 ...

  3. 状态压缩dp入门 第一题 POJ 3254 Corn Fields

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6460   Accepted: 3436 Descr ...

  4. poj - 3254 Corn Fields (状态压缩dp入门)

    http://poj.org/problem?id=3254 参考:http://blog.csdn.net/accry/article/details/6607703 农夫想在m*n的土地上种玉米, ...

  5. AcWing 327 玉米田

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

  6. AcWing 327 玉米田 题解 (动态规划—DP—状态压缩DP)

    原题传送门 #include<bits/stdc++.h>using namespace std;const int N = 14, M = 1 << 12, mod = 1e ...

  7. AcWing 327. 玉米田(棋盘式状压dp 十字形)

    本题与上一题AcWing 1064. 小国王(棋盘式状压dp)几乎一致,只不过上一题是"井字形的约束摆放",而本题是"十字形的约束摆放",即:当前位置上下左右 ...

  8. 【AcWing 327. 玉米田】状压dp

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

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

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

最新文章

  1. Python-EEG工具库MNE中文教程(8)-参考电极简介
  2. python的none是什么-python 判断变量是否是 None 的三种写法
  3. ad20如何导入库_一文看懂如何使用(Py)Stan进行贝叶斯推理
  4. pb mysql odbc_PB 连接Mysql ODBC/JDBC
  5. 文件操作模式扩展、游标操作
  6. vue路由详解版一目了然
  7. Windows 10系统安装JDK1.8与配置环境
  8. 数学趣题——求圆周率的近似值
  9. UML:图的分类及作用(共5类图,有9种图形)
  10. mysql collate
  11. C/C++文件操作效率比较——FILE/fstream
  12. Paradox of Our Times--我们这个时代的尴尬
  13. 算法59----打家劫舍【动态规划】
  14. 用oracle的sqlload导入文件到数据库
  15. 成功解决TypeError: distplot() got an unexpected keyword argument ‘y‘
  16. win7未能成功安装驱动服务器,win7找不到驱动程序提示“未能成功安装设备驱动程序”的解决方法...
  17. java棋盘最短路径障碍物_(Eucledian最短路径)检测平面中障碍物的角落
  18. 电机与运动控制笔记整理(四)——具体异步电机分析
  19. opencv不规则掩膜裁剪图片
  20. 1万字精讲,这你还学不废?Python爬取腾讯视频《斛珠夫人》弹幕,并转换成词云(单线程)——爬虫实例2

热门文章

  1. web程序设计基础R实验报告 2021年 ---太原理工大学
  2. RDD:基于内存集群计算的容错抽象。
  3. 【html】css字体样式
  4. SQL语法 自然连接 外连接 内连接
  5. 马尔科夫链原理介绍【通俗易懂】
  6. 大厂二面:应对千亿级高并发场景,MySQL如何分库分表?
  7. 【tensorflow学习之路】如何使用gpu进行运算
  8. zynq7000 资源介绍
  9. MATLAB导入EXCEL表格数据画散点图
  10. 开源项目CIIP(企业信息管理系统框架).2018.1.0910版更新介绍-上周工作总结