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 能状态压缩 能状态转移 能状态压缩的题 ...
随机推荐
- Java语法清单-快速回顾(开发)
Java CheatSheet 01.基础 hello,world! public static void main(String[] args) { System.out.println(" ...
- jar中没有主清单属性【解决办法】
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compi ...
- Centos 6 & Centos 7安装rabbitmq3.6.15(单节点)
系统准备 安装 erlang 语言环境 安装rabbitmq 配置网页插件 配置访问账号密码和权限 系统准备 centos6.5 与 centos7 都可以 ###安装依赖文件 yum -y inst ...
- word 文献标题自动编号
来自:word中自动编号和多级编号的使用 选中标题或段落,点击鼠标右键,在编号菜单内选择适合的自动编号样式.或者在窗口上方的“开始”选项卡中选择编号样式.如果对已选的编号样式不满意,可以照以上方法直接 ...
- 转载:jQuery 获取屏幕高度、宽度
做手机Web开发做浏览器兼容用到了,所以在网上找了些汇总下. alert($(window).height()); //浏览器当前窗口可视区域高度 alert($(document).height() ...
- 5步减小你的CSS样式表
第一步:学会如何组合选择器 什么是选择器?如果你还不知道什么叫做”选择器”,你可以先参考一下w3schools.com的CSS语法概述. 未优化的CSS代码在下面的图例中,你会看到来自三个不同选择器的 ...
- 用PS制作APP的界面图片
今天就教大家怎么做出这种厚度的地方还不是白色的,而是根据界面内容交相呼应的图案的APP界面展示图片. 以苹果5S的尺寸为例. 步骤: 1.新建一个画布尺寸为:640*1136,然后保存,命名如:5S效 ...
- Ajax.BeginForm 在 Chrome下的问题
项目背景:MVC4 代码: @using (Ajax.BeginForm("Index", "GoingMeter", new AjaxOptions { On ...
- input的placeholder颜色修改
input[type=text]::-webkit-input-placeholder { /* WebKit browsers / color: #999; } input[type=text]:- ...
- excel 导数据
参考: ="insert tsilverinfo(ss_id,memo,ss_weight,ts_id,ss_type,ModelPosX,ss_stoneW,ss_stoneWU) val ...