BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排
Description
Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地。FJ打算在牧场上的某几格土地里种上美味的草,供他的奶牛们享用。遗憾的是,有些土地相当的贫瘠,不能用来放牧。并且,奶牛们喜欢独占一块草地的感觉,于是FJ不会选择两块相邻的土地,也就是说,没有哪两块草地有公共边。当然,FJ还没有决定在哪些土地上种草。 作为一个好奇的农场主,FJ想知道,如果不考虑草地的总块数,那么,一共有多少种种植方案可供他选择。当然,把新的牧场荒废,不在任何土地上种草,也算一种方案。请你帮FJ算一下这个总方案数。
Input
* 第1行: 两个正整数M和N,用空格隔开
* 第2..M+1行: 每行包含N个用空格隔开的整数,描述了每块土地的状态。输入的第i+1行描述了第i行的土地。所有整数均为0或1,是1的话,表示这块土地足够肥沃,0则表示这块地上不适合种草
Output
* 第1行: 输出一个整数,即牧场分配总方案数除以100,000,000的余数
题解:
题目让求在一个M*N的矩阵上放草,有些位置不能放置,放的草不能四连通,求方案数。
因为M,N <=12 所以可以用一个int来表示一行的状态。
就可以用 dp[i][S] 表示第i行,状态是S的时候的方案数。
然后`2^12*2^12`枚举转移,判断一下是否可以转移。
∑dp[n][k]为答案。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
//by zrt
//problem:
using namespace std;
typedef long long LL;
LL dp[13][4097];
int map[13];// can not use
LL m,n;
LL mod=1000000000;
bool judge(int x){
for(int i=1;i<m;i++){
if(x&(1<<i)){
if((x&(1<<(i-1)))||(x&(1<<(i+1)))) return 0;
}
}
return 1;
}
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++){
for(int j=0,x;j<m;j++){
scanf("%d",&x);
if(!x) map[i]|=1<<j;
}
}
dp[0][0]=1;
for(int i=0;i<n;i++){
for(int j=0;j<(1<<m);j++){
if(!dp[i][j]) continue;
for(int k=0;k<(1<<m);k++){
if(judge(k)&&(!(k&map[i+1]))&&!(k&j)){
dp[i+1][k]+=dp[i][j];
if(dp[i+1][k]>=mod) dp[i+1][k]-=mod;
}
}
}
}
LL ans=0;
for(int i=0;i<(1<<m);i++){
ans+=dp[n][i];
if(ans>=mod) ans-=mod;
}
printf("%lld\n",ans);
return 0;
}
BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排的更多相关文章
- BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压动归
Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧 ...
- bzoj 1725: [Usaco2006 Nov]Corn Fields牧场的安排【状压dp】
压一维状态,转移时把符合条件的上一行加上 #include<iostream> #include<cstdio> using namespace std; const int ...
- 【BZOJ】1725: [Usaco2006 Nov]Corn Fields牧场的安排
[算法]状压DP [题解]对于上一行的每个状态,每行进行DFS. #include<cstdio> #include<algorithm> #include<cstrin ...
- BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排
1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 400 Solved: 290 ...
- bzoj1725: [Usaco2006 Nov]Corn Fields牧场的安排(状压dfs)
1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1122 Solved: 80 ...
- bzoj1725 [Usaco2006 Nov]Corn Fields牧场的安排(状压dp)
1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 714 Solved: 502 ...
- 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP
[BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...
- 【bzoj1725】[USACO2006 Nov]Corn Fields牧场的安排
题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...
- BZOJ1725,POJ3254 [Usaco2006 Nov]Corn Fields牧场的安排
题意 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行\((1 \leq M \leq 12, 1 \leq N \leq 12)\),每一格都是一块正方形的土地.FJ打算在牧场 ...
随机推荐
- 在windows C++中编译并使用Lua脚本
早前就用过LUA ,只是局部的小项目使用,突然兴起想要写一些关于LUA 的 文章,记录曾经学习过的点点滴滴. 这里我使用的是LUA5.2作为 案例 lua做为轻量级脚本语言已经被广泛应用到应用软件以 ...
- iOS数据处理之SQLite数据库
1. 数据库管理系统 1> SQL语言概述 SQL: SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集, 是一种功能齐全的 ...
- Docker中开启sshd服务
ssh服务安装 安装ssh服务 #yum install openssh-server -y 安装passwd(修改密码需要) #yum install passwd -y 修改sshd_config ...
- 观察者模式Demo
using System; using System.Collections.Generic; namespace Demo { #region 抽象层,定义了观察者模式 /// &l ...
- oracle数据库入门sql语句
数据库: 命名规范问题 依然是 _流.看来也确实应该抽空 来处理一下 今天吧,不行时间不能浪费.要更加专注.累了 就睡,醒来 就 好好 弄东西.白天 哪怕累一些,强度 大一些,晚上也可以抽空出去.溜溜 ...
- AWS ElastiCache 使用笔记
使用 AWS 管理控制台创建 Redis 缓存集群 创建子网组 在 Amazon VPC 中创建集群,则您必须指定缓存子网组.ElastiCache 使用该缓存子网组选择一个子网和此子网内的 IP 地 ...
- AWS 命令行界面 + Python 的 AWS 开发工具包 (Boto3)
安装AWS CLI $ pip install awscli 安装Boto3 $ pip install boto3 设置AWS CLI $ aws configure AWS Access Key ...
- Java并发——线程池Executor框架
线程池 无限制的创建线程 若采用"为每个任务分配一个线程"的方式会存在一些缺陷,尤其是当需要创建大量线程时: 线程生命周期的开销非常高 资源消耗 稳定性 引入线程池 任务是一组逻辑 ...
- 发布GeoServer后预览提示下载wms文件
这是因为发布的图层有中文所导致的,只需修改tomcat的server.xml文件 <Connector port="8080" protocol="HTTP/1.1 ...
- SMTP ERROR: Password command failed: 535 Incorrect authentication data
在处理一个使用PHPMailer来发送电邮,我在本地使用我的163邮箱来做测试发送电邮,能够成功的发送电邮:当上传到正式平台时,出现了,类似这样的错误信息 SMTP ERROR: Password c ...