1725: [Usaco2006 Nov]Corn Fields牧场的安排

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 714  Solved: 502
[Submit][Status][Discuss]

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种。

Source

Gold

/*
都说状压裸题,可我感觉好难的样子......
f[i][j]表示第i行状态为j时的方案数
1.39~43行 预处理每行状态(二进制,若状态和里有2^i,说明i号格子可以种)
2.19~23行 判断第一行的可行状态 相邻不能都种 && 枚举出来的状态可达 f[1][i]=1;
3.25~32行 dp 枚举行和每行状态 若上一行j状态可达,就转移,枚举转移到的状态k。
判断: 与上面不相同:(j&k)==0; 与右边不相同: (k&(k>>1))==0 状态可达: (k|mp[i])==mp[i]
方程: f[i][k]=(f[i][k]+f[i-1][j])%mod;
4.37行 累加每一行答案
*/
#include<iostream>
#include<cstdio>
#include<cstring> #define mod 100000000 using namespace std;
int mp[],f[][];
int ans,ed,n,m,x; void dp()
{
for(int i=;i<=ed;i++)
{
if((i&(i>>))== && (i|mp[])==mp[])
f[][i]=;
}
for(int i=;i<=m;i++) for(int j=;j<=ed;j++)
{
if(f[i-][j])
for(int k=;k<=ed;k++)
{
if((j&k)== && (k|mp[i])==mp[i] && (k&(k>>))==)
f[i][k]=(f[i][k]+f[i-][j])%mod;
}
}
for(int i=;i<=ed;i++) ans+=f[m][i],ans%=mod;
} int main()
{
scanf("%d%d",&m,&n);
for(int i=;i<=m;i++) for(int j=;j<=n;j++)
{
scanf("%d",&x);
mp[i]<<=;mp[i]+=x;
}
ed=(<<n)-;dp();
printf("%d\n",ans);
return ;
}

bzoj1725 [Usaco2006 Nov]Corn Fields牧场的安排(状压dp)的更多相关文章

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

    [BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...

  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. The Standard SSL Handshake

    The following is a standard SSL handshake when RSA key exchange algorithm is used: 1.  Client Hello ...

  2. UITableview 兼容IOS6 和IOS7的方法

    1. TableVIew向下拉44像素  添加Auto layout 2. Extended edge 选择Under top bars 2. 在Viewdidload中添加代码 if ([[UIDe ...

  3. Linux内核源码特殊用法

    崇拜并且转载的: http://ilinuxkernel.com/files/5/Linux_Kernel_Source_Code.htm Linux内核源码特殊用法 1 前言 Linux内核源码主要 ...

  4. JAVA经典题--死锁案例

    死锁原理: 两个线程相互等待对方释放同步监视器 例子程序: public class TestDeadLock implements Runnable { public int flag = 1; s ...

  5. Python面向对象----继承, 重载

    1. 面向对象三大特性之继承. 继承的便捷是子类可以直接调用父类里面的方法和属性.(在强类型语言里面是只能调用公有成员), 不用重复的造轮子. 减少程序猿的负担.实现多态等上层结构 2. 父类代码 3 ...

  6. vim学习3-查找替换

    一.字符的替换及撤销(Undo操作) 1.替换和撤销(Undo)命令 替换和Undo命令都是针对普通模式下的操作 命令 说明 r+<待替换字母> 将游标所在字母替换为指定字母 R 连续替换 ...

  7. 00106_UDP通信

    1.DatagramPacket (1)JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据: (2)在创建发送端和接收端的Dat ...

  8. 【codeforces 801B】Valued Keys

    [题目链接]:http://codeforces.com/contest/801/problem/B [题意] 定义一个对两个字符串x,y的f(x,y)函数; 返回的是一个字符串; 这个返回的字符串的 ...

  9. codeforeces近日题目小结

    题目源自codeforeces的三场contest contest/1043+1055+1076 目前都是solved 6/7,都差了最后一题 简单题: contest/1043/E: 先不考虑m个限 ...

  10. [转] C# 隐藏方法和重写方法

    1:方法重写:就是在基类中的方法用virtual关键字来标识,然后在继承类中对该类进行重写 (override),这样基类中的方法在子类中已经被重写了,基类中的方法在子类中已经失去了功能 了.当让基类 ...