USACO 2006 November Gold Corn Fields /// 状压 oj23941
题目大意:
输入n m
接下来n行m列
0表示不能种玉米 1表示能
要求种玉米位置的上下左右四连通区域不能种玉米
输出方案数
2 3
1 1 1
0 1 0
9
Number the squares as follows:
1 2 3
4
There are four ways to plant only on one squares (1, 2, 3, or 4), three ways to plant on two squares (13, 14, or 34), 1 way to plant on three squares (134), and one way to plant on no squares. 4+3+1+1=9.
#include <bits/stdc++.h>
#define MOD 100000000
using namespace std;
int mir[],may[<<],dp[][<<];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
int num=;
for(int i=;i<(<<m);i++)
if((i&(i<<))==) may[num++]=i;
/// 等于0说明符合条件 may[]保存所有可能放置
/// 左移一位后,若不为0,说明有相邻两位同时为1
/// 如 i 为011,则 i<<1 为110,(011&110) = 1 memset(mir,,sizeof(mir));
for(int i=;i<n;i++)
for(int j=;j<m;j++)
{
int tmp; scanf("%d",&tmp);
if(tmp==) mir[i]|=<<j;
/// mir[]可理解为 i 行的镜像拓本
} memset(dp,,sizeof(dp));
for(int i=;i<num;i++)/// 枚举所有可能 判断与拓本是否可匹配
if((mir[]&may[i])==) dp[][may[i]]=;
/// 等于0说明may[i]为该行的可能放置 for(int i=;i<n-;i++) // 枚举各行 从本行推下一行 所以只需到n-1行
for(int j=;j<num;j++) // 枚举所有可能放置
if((mir[i]&may[j])==)/// 当与本行可匹配时
{ // 该放置是本行可能出现的符合条件的放置时
for(int k=;k<num;k++)// 枚举所有可能(下一行的)
if(((mir[i+]&may[k])==)&&((may[k]&may[j])==))
/// 该放置为下一行的可能放置(与下一行的拓本可匹配)
/// 且 与本行的放置可匹配时
dp[i+][may[k]]+=dp[i][may[j]];
}
int ans=;
for(int i=;i<num;i++)// 枚举所有可能放置(最后一行)
ans=ans+dp[n-][may[i]],ans%=MOD;
// 由前往后推 所以只要最后一行存在这种放置的方案
// 则表示这种方案也符合前面所有行的放置
printf("%d\n",ans);
} return ;
}
USACO 2006 November Gold Corn Fields /// 状压 oj23941的更多相关文章
- USACO 2006 November Gold Corn Fields
USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...
- 【USACO 2006 November Gold】Corn Fields
[题目链接] 点击打开链接 [算法] 状压DP [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 12 #def ...
- 【POJ3254】Corn Fields 状压DP第一次
!!!!!!! 第一次学状压DP,其实就是运用位运算来实现一些比较,挺神奇的.. 为什么要发“!!!”因为!x&y和!(x&y)..感受一下.. #include <iostre ...
- POJ 3254 Corn Fields (状压入门)
Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M≤ 12; 1 ≤ N ≤ 12) ...
- 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 - [状压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入门题,将可以种菜的状态用一个数的二进制表 ...
- USACO 2006 November Gold
POJ 3253 Fence Repair STL堆操作 我想说,STL里堆是我目前见到最蛋疼的操作. #include <cstdio> #include <cstring> ...
- [ An Ac a Day ^_^ ] POJ 3254 Corn Fields 状压dp
题意: 有一块n*m的土地 0代表不肥沃不可以放牛 1代表肥沃可以放牛 且相邻的草地不能同时放牛 问最多有多少种放牛的方法并对1e8取模 思路: 典型的状压dp 能状态压缩 能状态转移 能状态压缩的题 ...
随机推荐
- 解析Mybatis入门第一天
MyBatis是一个基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单. MyBatis通过XML或者注解的方式将要执行的各 ...
- Zookeeper_Paxos算法
Paxos算法 算法简介 Paxos算法是莱斯利-兰伯特在1990年提出的一种基于消息传递的.具有容错性的一致性算法,Google Chubb(分布式锁服务)的作者Mike Burrwos说过,世上只 ...
- DELPHI读取网页源文件和获取字符串
说到网页采集,通常大家以为到网上偷数据,然后把到收集到的数据挂到自己网上去.其实也可以将采集到的数据做为公司的参考,或把收集的数据跟自己公司的业务做对比等.目前网页采集多为3P代码为多(3P即ASP. ...
- maven项目打成jar包之前需要在pom文件做的准备工作
文章目录 pom.xml 很多时候在eclipse中没问题java -jar没有主类,或者classnotfound pom.xml <build> <plugins> < ...
- 6. 第一个jmeter脚本开发-测试百度首页
需求:可以承受5个用户同时访问百度解题思路:我们可以从这短短的一句话中提取3个点:同时.5个并发.百度服务器解题方法:方法一:录制请求录制方法会在下一篇进行讲解,本篇不做过多介绍. 方法二:自定义添加 ...
- beaglebone black 与电脑互传文件(夹)
1. PSCP方法 PSCP,是putty的一个组件. 1.1 下载PSCP 先给连接http://www.chiark.greenend.org.uk/~sgtatham/putty/downloa ...
- 从数组中任意取出2个数,判断他们的和是否为输入的数字sum,时间复杂度为0(n^2),空间复杂度0(1)
从数组中任意取出2个数,判断他们的和是否为输入的数字sum,时间复杂度为0(n^2),空间复杂度0(1) 假设数据已经是排序好的 #include <stdio.h> #include & ...
- C++数据类型之字符串类型&布尔类型&数据的输入
字符串型 **作用**:用于表示一串字符 **两种风格** 1. **C风格字符串**: char 变量名 [ ] = "字符串值" 2.**C++风格字符串**: stri ...
- (十七)从UML角度来理解依赖
UML软件建模 什么是依赖?简单理解就是一个类A用到了类B,但是这种使用关系是偶然性的.临时性的.非常弱的,类B的变化会影响到类A 显示依赖与隐式依赖 依赖倒置:我们要依赖于高层业务,不依赖于低层业务 ...
- smb中继攻击
一.NTLM hash 和 Net-NTLM hash 1.客户端向服务器发送一个请求,请求中包含明文的登录用户名.服务器会提前保存登录用户名和对应的密码 hash 2.服务器接收到请求后,生成一个 ...