[ An Ac a Day ^_^ ] POJ 3254 Corn Fields 状压dp
题意:
有一块n*m的土地
0代表不肥沃不可以放牛 1代表肥沃可以放牛
且相邻的草地不能同时放牛
问最多有多少种放牛的方法并对1e8取模
思路:
典型的状压dp 能状态压缩 能状态转移
能状态压缩的题的特点就是只有两种状态
所以用0 1表示两种状态 用位运算判断是否符合条件
然后将前一行的合理状态转移到后一行
最后统计最后一行的状态
dp[i][j]代表第i行以第j种状态放牛时有多少种不同的状态
(c++的语言特性是 封装 继承 多态~)
/* ***********************************************
Author :Sun Yuefeng
Created Time :2016/10/31 17:59:53
File Name :C.cpp
************************************************ */ #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<bitset>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<queue>
#include<list>
#define M(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=<<;
const int mod=1e8;
int dx[]= {,,,-,,-,,-};
int dy[]= {,-,,,-,,,-}; int _map[maxn]; //记录给出的每块地的状态
int st[maxn]; //记录每一行的状态
int dp[][maxn]; bool judge(int x) //判断相邻两位是否同时为1
{
return (x&(x<<));
} bool judge(int x,int y) //判断两位是否同时为1
{
return _map[x]&st[y];
} int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,m;
while(cin>>n>>m){
int x;
M(dp,),M(_map,),M(st,);
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
cin>>x;
if(!x)
{
_map[i]+=(<<j); //向图中添加空地
}
}
}
int k=;
for(int i=;i<(<<m);i++) //初始化能不能以i状态放牛
{
if(!judge(i))
{
st[k++]=i;
}
}
for(int i=;i<k;i++) //初始化第一行状态
{
dp[][i]=(!judge(,i));
}
for(int i=;i<n;i++)
{
for(int j=;j<k;j++)
{
if(judge(i,j)) continue; //判断第i行是否能以j的方式放牛
for(int l=;l<k;l++)
{
if(judge(i-,l)) continue; //判断上一行状态
if(!(st[j]&st[l])) //符合题意转移状态
dp[i][j]+=dp[i-][l];
}
}
}
int ans=;
for(int i=;i<k;i++)
{
ans+=dp[n-][i];
ans%=mod;
}
cout<<ans<<endl;
}
return ;
}
[ An Ac a Day ^_^ ] POJ 3254 Corn Fields 状压dp的更多相关文章
- POJ 3254 - Corn Fields - [状压DP水题]
题目链接:http://poj.org/problem?id=3254 Time Limit: 2000MS Memory Limit: 65536K Description Farmer John ...
- POJ 3254 Corn Fields (状压dp)
题目链接:http://poj.org/problem?id=3254 给你n*m的菜地,其中1是可以种菜的,而菜与菜之间不能相邻.问有多少种情况. 状压dp入门题,将可以种菜的状态用一个数的二进制表 ...
- Poj - 3254 Corn Fields (状压DP)(入门)
题目链接:https://vjudge.net/contest/224636#problem/G 转载于:https://blog.csdn.net/harrypoirot/article/detai ...
- poj 3254 Corn Fields 状压dp入门
题目链接 题意 在\(M\times N\)的\(0,1\)格子上放东西,只有标记为\(1\)的格子可以放东西,且相邻的格子不能同时放东西.问有多少种放法. 思路 参考:swallowblank. \ ...
- POJ 1684 Corn Fields(状压dp)
描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ ...
- POJ 3254 Corn Fields (状压入门)
Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M≤ 12; 1 ≤ N ≤ 12) ...
- 【POJ3254】Corn Fields 状压DP第一次
!!!!!!! 第一次学状压DP,其实就是运用位运算来实现一些比较,挺神奇的.. 为什么要发“!!!”因为!x&y和!(x&y)..感受一下.. #include <iostre ...
- [USACO06NOV]玉米田Corn Fields 状压DP
题面: 农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地.John打算在牧场上的某几格里种上美味的草,供他的 ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
随机推荐
- IT职位分析
人才市场的IT职位分析 最近要找长沙的工作,于是通过湖南人才市场搜索了一下职位.结果得到的数据让我很难比较,作为一个 IT 业滚爬了多年的程序员,对这样的搜索结果很不满意.于是,我不得不自己来整理 ...
- 支付宝移动支付开发详细教程服务端采用.net mvc webapi(C#)
转自:http://www.kwstu.com/ArticleView/netmvc_201511132005431321 最近开发手机app需要实现移动支付功能,由于考虑支付安全将支付宝生成签名写到 ...
- jquery选择器之层级过滤选择器
$("ancestor descendant"):选取parent元素后所有的child元素 $("parent > child"):选取parent元素 ...
- css中display的属性解析
display 属性规定元素应该生成的框的类型. 他有很多属性值,见如下表格: none 此元素不会被显示. block 此元素将显示为块级元素,此元素前后会带有换行符. inline 默认.此元素会 ...
- 关于前端JS模块加载器实现的一些细节
最近工作需要,实现一个特定环境的模块加载方案,实现过程中有一些技术细节不解,便参考 了一些项目的api设计约定与实现,记录下来备忘. 本文不探讨为什么实现模块化,以及模块化相关的规范,直接考虑一些技术 ...
- scribefire 多博客管理利器 安装详解
scribefire 多博客管理利器 安装详解 一.ScribeFire介绍 ScribeFire 是 Firefox (火狐浏览器)上著名的博客写作工具,目前已跨平台支持多浏览器(Firefox,C ...
- day7 面向对象编程
编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...
- ADO.NET—两种连接模式
一.ADO.NET简介 ADO.NET的名称起源于ADO(ActiveX Data Objects),这是一个广泛的类组,用于在以往的Microsoft技术中访问数据.用来访问数据库,.NET环境下首 ...
- 使用kettle工具将文本文件的内容插入Linux虚拟机下的mysql表中
一. 解压kettle包 1.把包拷到Linux系统下 还有mysql的驱动包 2.解压zip后缀的包 输入命令:unzip /software/pdi-ce-7.0.0.0-25.zip ...
- SSM整合案例(Spring+Struts+Mybatis)
项目目录结构 第一步:创建数据库和数据表 CREATE DATABASE IF NOT EXISTS mybatis; USE mybatis; CREATE TABLE t_user ( ) NOT ...