【BZOJ1725】[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的余数

Sample Input

2 3
1 1 1
0 1 0

Sample Output

9
输出说明:
按下图把各块土地编号:
1 2 3
4
只开辟一块草地的话,有4种方案:选1、2、3、4中的任一块。开辟两块草地的话,有3种方案:13、14以及34。选三块草地只有一种方案:134。再加把牧场荒废的那一种,总方案数为4+3+1+1=9种。
题解:状压DP,刷水有益健康。
#include <cstdio>
#include <iostream>
using namespace std;
const int mod=100000000;
int n,m,tot,v[20],ans;
int f[20][500],s[500];
int main()
{
scanf("%d%d",&n,&m);
int i,j,k,a;
for(i=0;i<1<<m;i++)
if((i&(i<<1))==0)
s[++tot]=i;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&a);
if(!a) v[i]+=1<<j-1;
}
}
f[0][1]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=tot;j++)
{
if(s[j]&v[i]) continue;
for(k=1;k<=tot;k++)
{
if(s[j]&s[k]) continue;
f[i][j]=(f[i][j]+f[i-1][k])%mod;
}
}
}
for(i=1;i<=tot;i++)
{
if(s[i]&v[n]) continue;
ans=(ans+f[n][i])%mod;
}
printf("%d",ans);
return 0;
}

【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP的更多相关文章

  1. bzoj1725 [Usaco2006 Nov]Corn Fields牧场的安排(状压dp)

    1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 714  Solved: 502 ...

  2. bzoj1725: [Usaco2006 Nov]Corn Fields牧场的安排(状压dfs)

    1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1122  Solved: 80 ...

  3. BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP

    Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧 ...

  4. BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排 状压动归

    Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧 ...

  5. [Usaco2006 Nov]Corn Fields牧场的安排 壮压DP

    看到第一眼就发觉是壮压DP 然后就三进制枚举子集吧. 这题真是壮压入门好题... 对于dp[i][j] 表示第i行,j状态下前i行的分配方案数. 那么dp[i][j]肯定是从i-1行转过来的 那么由于 ...

  6. BZOJ1725: [Usaco2006 Nov]Corn Fields牧场的安排

    1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 400  Solved: 290 ...

  7. 【bzoj1725】[USACO2006 Nov]Corn Fields牧场的安排 状态压缩dp

    题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...

  8. BZOJ1725,POJ3254 [Usaco2006 Nov]Corn Fields牧场的安排

    题意 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行\((1 \leq M \leq 12, 1 \leq N \leq 12)\),每一格都是一块正方形的土地.FJ打算在牧场 ...

  9. [Usaco2006 Nov]Corn Fields牧场的安排

    题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...

随机推荐

  1. Windows综合应用

    待修改中-------------------------------------- 快捷键部分: Win+E:打开"我的电脑"E:Explot的缩写,即资源管理器. ------ ...

  2. TypeError: 'bool' object is not callable g.user.is_authenticated()

    此问题查了stackoverflow后知道is_authenticated是一个属性而不是一个方法所以g.user.is_authenticated() 用法会报错

  3. Hadoop概括——学习笔记<一>

    之前有幸在MOOC学院抽中小象学院hadoop体验课. 这是小象学院hadoop2.X概述第一章的笔记 第一章主要讲的是hadoop基础知识.老师讲的还是比较全面简单的,起码作为一个非专业码农以及数据 ...

  4. [Git] Git基础

    远程仓库 查看远程仓库: git remote -v 添加远程仓库: git remote add <repoName> <url> 拉取远程仓库数据: git fetch & ...

  5. java表格的使用 单元格绘制二

    JTable单元格是由单元格绘制器绘制出来的,这是一些执行TableCellRenderer接口的类.TableCellRenderer接口定义了唯一的getTableCellRendererComp ...

  6. Mac Pro 利用PHP导出SVN新增或修改过的文件

    先前在 Windows 操作系统下,习惯用 TortoiseSVN 导出新增或修改过的文件([相当实用]如何让TortoiseSVN导出新增或修改过的文件 ),最近换成了 Mac Pro 笔记本电脑, ...

  7. PHP打印测试,PHP调试技巧

    第一步: 在 php.ini 中,将 display_errors 设置为 On: 第二步: 在 框架的 开始处,添加如下代码: <?php if (isset($_GET['debug'])) ...

  8. 为 MySQL 设置默认字符集(UTF-8)避免产生乱码

    环境:Windows 7+Wamp Server+MySQL 5.7.9 查看MySQL默认编码: SHOW VARIABLES LIKE 'character%' character_set_cli ...

  9. wampServer图标为橙色无法启动原因之一

    前段时间,自己在本地做了一个WordPress的网站,利用wampserver配置的,后来突然无法启动了. 经过仔细查找发现是因为之前装了sql server,导致wampServer无法启动,那么怎 ...

  10. JS面试题-算法台阶问题

    有100格台阶,可以跨1步可以跨2步,那么一个有多少种走法: 今天电话面试.遇到一道算法问题,然后瞬间一脸懵逼: 然后机智的我,自作聪明的想到如果一个人每次都走1步,那么最多步,每次走2步最少步:然后 ...