ACWing 327. 玉米田(状态压缩dp入门)
农夫约翰的土地由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入门)相关推荐
- AcWing 327. 玉米田(状态压缩DP)
AcWing 327. 玉米田(状态压缩DP) 一.问题 二.分析 1.思路 2.状态表示 3.状态转移 4.循环设计 5.初末状态 三.代码 一.问题 二.分析 1.思路 这道题与之前所讲解的AcW ...
- acwing 327. 玉米田
327. 玉米田 题意: m * n的土地,有的土地不育,有的可以种植,要求相邻的土地不能同时种植玉米,问有多少种种植方式 题解: 状压dp,先存每一行可能的状态,然后状态转移,注意相邻不能同时种植除 ...
- 状态压缩dp入门 第一题 POJ 3254 Corn Fields
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6460 Accepted: 3436 Descr ...
- poj - 3254 Corn Fields (状态压缩dp入门)
http://poj.org/problem?id=3254 参考:http://blog.csdn.net/accry/article/details/6607703 农夫想在m*n的土地上种玉米, ...
- AcWing 327 玉米田
题目描述: 农夫约翰的土地由M*N个小方格组成,现在他要在土地里种植玉米. 非常遗憾,部分土地是不育的,无法种植. 而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边缘. ...
- AcWing 327 玉米田 题解 (动态规划—DP—状态压缩DP)
原题传送门 #include<bits/stdc++.h>using namespace std;const int N = 14, M = 1 << 12, mod = 1e ...
- AcWing 327. 玉米田(棋盘式状压dp 十字形)
本题与上一题AcWing 1064. 小国王(棋盘式状压dp)几乎一致,只不过上一题是"井字形的约束摆放",而本题是"十字形的约束摆放",即:当前位置上下左右 ...
- 【AcWing 327. 玉米田】状压dp
题目链接 题意: 农夫约翰的土地由 M×N 个小方格组成,现在他要在土地里种植玉米. 非常遗憾,部分土地是不育的,无法种植. 而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公 ...
- 327 玉米田(状态压缩dp)
1. 问题描述: 农夫约翰的土地由 M×N 个小方格组成,现在他要在土地里种植玉米.非常遗憾,部分土地是不育的,无法种植.而且,相邻的土地不能同时种植玉米,也就是说种植玉米的所有方格之间都不会有公共边 ...
最新文章
- Python-EEG工具库MNE中文教程(8)-参考电极简介
- python的none是什么-python 判断变量是否是 None 的三种写法
- ad20如何导入库_一文看懂如何使用(Py)Stan进行贝叶斯推理
- pb mysql odbc_PB 连接Mysql ODBC/JDBC
- 文件操作模式扩展、游标操作
- vue路由详解版一目了然
- Windows 10系统安装JDK1.8与配置环境
- 数学趣题——求圆周率的近似值
- UML:图的分类及作用(共5类图,有9种图形)
- mysql collate
- C/C++文件操作效率比较——FILE/fstream
- Paradox of Our Times--我们这个时代的尴尬
- 算法59----打家劫舍【动态规划】
- 用oracle的sqlload导入文件到数据库
- 成功解决TypeError: distplot() got an unexpected keyword argument ‘y‘
- win7未能成功安装驱动服务器,win7找不到驱动程序提示“未能成功安装设备驱动程序”的解决方法...
- java棋盘最短路径障碍物_(Eucledian最短路径)检测平面中障碍物的角落
- 电机与运动控制笔记整理(四)——具体异步电机分析
- opencv不规则掩膜裁剪图片
- 1万字精讲,这你还学不废?Python爬取腾讯视频《斛珠夫人》弹幕,并转换成词云(单线程)——爬虫实例2