.

 /*本题为状态压缩题
题目大意 :
一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,
可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方
格不能同时放牛(不包括斜着的),即牛与牛不能相邻。问有多少种放牛方
案(一头牛都不放也是一种方案);
要枚举每一行中的是否种植(也就是0 1状态) 最大状态的12,
每一行的总共可以有的种植方式就有2^12次方种,
而二进制的0 1 特征刚好可以表示这些种植方式;
比如0001 表示在第四个位置种植,其他不种;
比如0101 表示2 4种,依此类推。。。
所以dp[n][m]的第二维度的大小,就要根据题目中的最大限度,
本题n,m的大小开到了12;所以我们以13为上限,或者2^12+10都可以;
dp[n][1<<13];
*/
#include<cstdio>
#include<string.h>
using namespace std;
const int mod=1e8;
const int maxn=<<;
int a[maxn];
int dp[][maxn];
int mp[];
int judge1(int x) //判断同一行中是否会出现相邻为1的情况。
{
return (x&(x<<));
}
int judge2(int i,int x) //判断此情况是否是题目中的可列举情况;
{ //因为题目中有限制哪些地方可以种植,哪些不可以;
return (mp[i]&a[x]);
}
void init() //初始化
{
memset(dp,,sizeof(dp));
memset(mp,,sizeof(mp));
memset(a,,sizeof(a));
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
init();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
int t;
scanf("%d",&t);
if(t==)
mp[i]+=<<(j-); //将题目中每一行的限制情况存储起来;
//这里存储的是不可种植的地方
//后面的判断某种种植方式是否可行的方案
//就可以通过mp[i]&a[x]来解决;
//比如题目中限制了0 1 0 1,表示只有2 4可种植
//而这里是存储了1 0 1 0,现在有个方案是0 1 0 0
//将其与1 0 1 0进行&运行,假如等于0,就表示可行;
}
int cot=;
for(int i=;i<(<<m);i++){
if(!judge1(i))
a[cot++]=i; //将第一行可表示的状态(没有相邻1)列举出来
//此时还未与题目中的限制的可种植地方相比较;
}
for(int i=;i<cot;i++) //与题目限制的相比较;
if(!judge2(,i)) //如果方案可行,=1;
dp[][i]=;
for(int i=;i<=n;i++){
for(int j=;j<cot;j++){
if(judge2(i,j)) //如果不满足限制的种植条件
continue;
for(int k=;k<cot;k++){
if(judge2(i-,k)) //如果不满足限制的种植条件
continue;
if(!(a[k]&a[j]))
dp[i][j]+=dp[i-][k];
}
}
}
int ans=;
for(int i=;i<cot;i++){
ans+=dp[n][i]; //将所有方案相加;
ans%=mod;
}
printf("%d\n",ans);
}
return ;
}

最新文章

  1. C#获取全部目录和文件
  2. 如何为编程爱好者设计一款好玩的智能硬件(八)——LCD1602点阵字符型液晶显示模块驱动封装(中)
  3. 【转】 使用Redis的Pub/Sub来实现类似于JMS的消息持久化
  4. window.showModalDialog基础
  5. 7种基本排序算法的Java实现
  6. 如何设置让外网通过路由器IP加端口号访问到局域网一台Web服务器
  7. DPI情况下处理
  8. (step6.1.4)hdu 1102(Constructing Roads——最小生成树)
  9. asp.net修行入门讨论
  10. oracle nvl2函数
  11. jquery 事件的触发与绑定
  12. Got error 28 from storage engine 解决方法
  13. 大数据小白系列——HDFS(2)
  14. python简说(二十八)json.path
  15. 9.Mysql字符集
  16. ES批量索引写入时的ID自动生成算法
  17. Node.js文件操作二
  18. elasticsearch_dsl 的nested
  19. Django中contenttype的应用
  20. linux命令详解2-文件管理,查看文件命令

热门文章

  1. Aspcms标签大全及常用标签
  2. aspose插入图片
  3. idea插件不兼容问题
  4. git Auto packing the repository in background for optimum performance
  5. sublime text 3安装html-css-js prettify后使用时报错An unhandled OS error was encountered
  6. 初入python
  7. SpringBoot之spring.factories
  8. 2020牛客寒假算法基础集训营1 I-nico和niconiconi
  9. Progressbar 实例
  10. 【你不知道的javaScript 上卷 笔记1】 javaScript 是如何工作的?