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 能状态压缩 能状态转移 能状态压缩的题 ...
随机推荐
- Andriod Unity 调用android函数
//首先这是一个前沿 //我看了多的资料,还看了近半个小时的 android activity 的讲解 终于打出了apk //接下来开始 //一步一步的跟着我走 1.创建一个android项目或者一个 ...
- JAVA javac
{ 用法: javac <options> <source files>其中, 可能的选项包括: -g 生成所有调试信息 - ...
- 【Codeforces 1148B】Born This Way
[链接] 我是链接,点我呀:) [题意] 有人要从A地飞向B地,然后从B地飞向C地. 给出A,B地的n.m个航班的出发时间. 已知从A到B的航班都是ta和tb时长到达B.C 只有到达B的时候航班还没起 ...
- Vue.js - 路由 vue-router 的使用详解2(参数传递)
一.使用冒号(:)的形式传递参数 1,路由列表的参数设置 (1)路由列表的 path 是可以带参数的,我们在路由配置文件(router/index.js)里以冒号的形式设置参数. (2)下面样例代码中 ...
- fastText一个库用于词表示的高效学习和句子分类
fastText fastText 是 Facebook 开发的一个用于高效学习单词呈现以及语句分类的开源库. 要求 fastText 使用 C++11 特性,因此需要一个对 C++11 支持良好的编 ...
- opencv-角点检测之Harris角点检测
转自:https://blog.csdn.net/poem_qianmo/article/details/29356187 先看看程序运行截图: 一.引言:关于兴趣点(interest point ...
- 如何查看jdk版本和路径
cmd进入命令提示符,查看jdk版本,输入java -version;查看jdk路径 ,输入set java home.,这个也是默认路径
- neo4j 基本概念和Cypher语句总结
下面是一个介绍基本概念的例子,参考链接Graph database concepts: (1) Nodes(节点) 图谱的基本单位主要是节点和关系,他们都可以包含属性,一个节点就是一行数据,一个关系也 ...
- verifier 调试内存泄露
没啥技术含量,都是老段子了, 这次记下来,只是我想说,我也做过,留个念相. 前置条件,电脑里面必须得有Verifier,有了之后把自己的驱动加进去, WinDBG上双机,然后就可以跑了,跑一段时间就可 ...
- nodejs入门安装与调试,mac环境
install nvm (node version manager) 安装nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v ...