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的余数

题解:

状压动归傻题.

保存有用状态来减少枚举的状态数.

Code:

#include<bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define mod 100000000
#define maxn 20
#define ll long long
using namespace std;
ll F[15][20000],ans;
int G[20][20],w[20];
vector<int>sta[maxn],h;
int main(){
// setIO("input");
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<15;++i) w[i]=(1<<(i-1));
//预处理出所有合法状态
for(int k=0;k<w[m+1];++k)
{
int l=k,pre=0,flag=1;
while(l)
{
if((l&1) && pre) { flag=0; break; }
if(l&1)
pre = 1;
else
pre = 0;
l>>=1;
}
if(flag) h.push_back(k);
}
for(int i=1;i<=n;++i)
{
int cur=0;
for(int j=1;j<=m;++j)
{
scanf("%d",&G[i][j]);
if(G[i][j]==0) cur|=w[j]; //不合法
}
for(int j=0,sz=h.size();j<sz;++j)
{
if(h[j]&cur) continue;
sta[i].push_back(h[j]);
}
}
F[1][0]=1;
for(int i=0,sz=sta[1].size();i<sz;++i) F[1][sta[1][i]]=1;
for(int i=2;i<=n;++i)
{
for(int j=0,sz=sta[i].size();j<sz;++j)
{
for(int k=0,sz2=sta[i-1].size();k<sz2;++k){
if(sta[i][j]&sta[i-1][k]) continue;
F[i][sta[i][j]]=(F[i][sta[i][j]]+F[i-1][sta[i-1][k]])%mod;
}
}
}
for(int i=0,sz=sta[n].size();i<sz;++i) ans=(ans+F[n][sta[n][i]])%mod;
printf("%lld",ans);
return 0;
}

  

最新文章

  1. ES6 - Note4:Class类
  2. WSDL2ObjC Unsupported Media Type
  3. 【转载】JSP常用跳转方式
  4. P1371 NOI元丹
  5. 夺命雷公狗ThinkPHP项目之----企业网站24之网站前台获取当前栏目和顶级栏目
  6. http://www.allthingsdistributed.com
  7. 1741. Communication Fiend(dp)
  8. Activity生命周期与状态保存
  9. PHP自定义日期英文格式 Feb 11,2015
  10. bzoj 3624: [Apio2008]免费道路 生成树的构造
  11. Rust这个新的语言
  12. CSS 选择器之基本选择器 属性选择器 伪类选择器
  13. Java课程设计——计算数学表达式的程序(201521123051 谢庆圆)
  14. alpha-咸鱼冲刺day2
  15. Resharper 详细教程
  16. ubuntu yolov2 训练自己的数据集
  17. Elasticsearch之优化
  18. SpringMvc+JavaConfig+Idea 基于JavaConfig搭建项目
  19. bower failed: UNABLE_TO_VERIFY_LEAF_SIGNATURE
  20. web.xml listener配置

热门文章

  1. Golang - 面对&quot;对象&quot;
  2. vue中的slot理解和使用
  3. ro的session
  4. LightOJ1234 Harmonic Number
  5. hdu 3555数位dp基础入门题
  6. EXPLAIN sql优化方法(1) 添加索引
  7. 【ACM】poj_2080_Calendar_201307311043
  8. 数据结构----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列
  9. HDU 1238
  10. 3.2 re--正則表達式操作(Regular expression operations)