没什么可说的,入门级状压DP。直接撸掉

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <set>
#define LL long long
#define FOR(i, x, y) for(int i=x;i<=y;i++)
using namespace std;
const int maxn = 5000;
const int MOD = 100000000;
int N, M, K;
int C[20], state[maxn];
int dp[20][maxn];
bool judge(int x)
{
if(x & (x << 1)) return false;
return true;
}
void init()
{
memset(dp, 0, sizeof(dp));
memset(state, 0, sizeof(state));
memset(C, 0, sizeof(C));
int r = (1 << M) - 1; K = 0;
FOR(i, 0, r) if(judge(i)) state[++K] = i;
}
int main()
{
while(scanf("%d %d", &N, &M)!=EOF)
{
init();
int X;
FOR(i, 1, N)
FOR(j, 1, M)
{
scanf("%d", &X);
if(X == 0) C[i] = C[i] | (1 << (M - j));
}
FOR(i, 1, K)
{
if(!(state[i] & C[1])) dp[1][i] = 1;
} FOR(i, 2, N)
FOR(j, 1, K)
{
if(C[i-1] & state[j]) continue;
FOR(l, 1, K)
{
if((C[i] & state[l]) || (state[l] & state[j])) continue;
dp[i][l] = (dp[i-1][j] + dp[i][l]) % MOD;
}
}
int ans = 0;
FOR(i, 1, K) ans = (ans + dp[N][i]) % MOD;
printf("%d\n", ans);
}
return 0;
}

最新文章

  1. bootstrapvalidator+bootstrap-select select无法校验问题解决方法
  2. Ubuntu 手工挂载硬盘
  3. KMP 算法
  4. GJM : Unity3D 常用网络框架与实战解析 【笔记】
  5. 第二章 存储,2.2 AliCloudDB--双11商家后台数据库的基石(作者:玄惭)
  6. 在创维E900-S悦Me盒子上安装第三方软件
  7. Web前端代码规范与页面布局
  8. defer属性----&gt;执行外部脚本
  9. 使用本地光盘安装Microsoft .NET Framework 3.5 for Win8.1/WinServer2012R2
  10. c &amp; c++中const
  11. Joomla安装图文教程 (送 Joomla 中文语言包)
  12. AlarmManager类的应用(实现闹钟功能)
  13. 记关于 Lambda 表达式的基础写法
  14. perl 简单后门程序
  15. log4j日志输出性能优化-缓存、异步
  16. QPropertyAnimation实现图形,控件的旋转和位移动画,尤其是旋转
  17. 2018/12.21:函数this的指向
  18. 【C语言基础】循环体系
  19. IDEA中,将项目加入maven管理。
  20. 获取ADO连接字符串

热门文章

  1. HttpWebRequest的使用
  2. 理解JavaScript模仿块作用域
  3. JDBC具体解释(2)
  4. SELinux安全系统基础
  5. kafka基本原理概述——patition与replication分配
  6. c++ 编译时检测结构体大小的的宏定义写法
  7. HDU 3535 AreYouBusy(混合背包)
  8. Angular路由与Nodejs路由的区别
  9. Mac下Sublime Text 总是以新窗口打开文件的解决办法
  10. git命令 add -a和add .和add -u 的区别