Description

题库链接

给你一个 \(0,1\) 矩阵,只准你在 \(1\) 上放物品;并且要满足物品不能相邻。允许空放,问方案数,取模。

\(1\leq n,m\leq 12\)

Solution

状压 \(DP\) 。

记 \(f_{i,t}\) 为处理到第 \(i\) 行时放物品的状态为 \(t\) 的方案数。

若第 \(i\) 行的 \(1\) 的状态为 \(a\) 。显然由于必须放在 \(1\) 上,所以 \(a~and~t = a\) ,其中 \(and\) 为按位与;并且由于同行之间不能相邻,故 \((t>>1)~and~t=0\) 。

枚举的上一行状态为 \(k\) 。显然 \(t~and~k=0\) 。

复杂度为 \(O(n\cdot (2^n)^2)\)

Code

//It is made by Awson on 2018.2.25
#include <bits/stdc++.h>
#define LL long long
#define dob complex<double>
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
#define writeln(x) (write(x), putchar('\n'))
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int yzh = 100000000;
const int size = 1<<12;
void read(int &x) {
char ch; bool flag = 0;
for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || 1); ch = getchar());
for (x = 0; isdigit(ch); x = (x<<1)+(x<<3)+ch-48, ch = getchar());
x *= 1-2*flag;
}
void print(LL x) {if (x > 9) print(x/10); putchar(x%10+48); }
void write(LL x) {if (x < 0) putchar('-'); print(Abs(x)); } int n, m, a[15], x, f[15][size+5], bin[15]; void work() {
read(n), read(m); bin[0] = 1; for (int i = 1; i <= 12; i++) bin[i] = bin[i-1]<<1;
for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) read(x), a[i] = ((a[i]<<1)|x);
f[0][0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j < bin[m]; j++)
if ((j == 0 || ((j|a[i]) == a[i])) && (j&(j>>1)) == 0)
for (int k = 0; k < bin[m]; k++)
if ((k == 0 || ((k|a[i-1]) == a[i-1])) && (k&(k>>1)) == 0)
if ((j&k) == 0) f[i][j] = (f[i][j]+f[i-1][k])%yzh;
}
int ans = 0;
for (int i = 0; i < bin[m]; i++) ans = (ans+f[n][i])%yzh;
writeln(ans);
}
int main() {
work(); return 0;
}

最新文章

  1. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
  2. 进击的Python【第二章】:Python基础(二)
  3. JavaScript的理解记录(5)
  4. windows插件框架
  5. scrollview技巧
  6. oracle创建用户并导入dmp文件
  7. UI基础之UITableViewController相关
  8. linux线程同步(5)-屏障
  9. My VA Snippet
  10. FastMM的安装方法
  11. Cannot instantiate the type List&amp;lt;Integer&amp;gt;
  12. CFormView动态调整对话框的尺寸和调整比例控制的部署
  13. jquery在调试时出现缺少对象的错误
  14. 为开源社区尽一份力,翻译RocketMQ官方文档
  15. MacOS App代码申请管理员权限
  16. [转载]Oracle 游标使用全解
  17. 题解——洛谷P2827 NOIP提高组 2016 蚯蚓
  18. 卷积神经网络 CNN 笔记
  19. python----函数与函数式编程
  20. Scrum立会报告+燃尽图 06

热门文章

  1. 多目标跟踪(MOT)评测标准
  2. SQLSERVER2012的分页新功能
  3. 201621123040《Java程序设计》第12周学习总结
  4. HAOI 2012 高速公路
  5. 使用C#开发Android应用之WebApp
  6. JQ.ajax 各种参数及属性设置 ( 转载 )
  7. MySQL binlog 日志
  8. Spring AOP AspectJ
  9. Linux CentOS7.0 (04)systemctl vs chkconfig、service
  10. SpringBoot入门:新一代Java模板引擎Thymeleaf(实践)