#include<bits/stdc++.h>
using namespace std;
const int mod = 100000000;
int b[20][20] = {0}, f[20][1 << 15] = {0};
int main() {
int m, n;
scanf("%d%d", &m, &n);
for(int i = 0; i < m; ++i) {
for(int j = 0; j < n; ++j) {
scanf("%d", &b[i][j]);
}
}
for(int i = 0; i < m; ++i) {
for(int k = 0; k < (1 << n); ++k) {
int flag = 1;
for(int j = 0; j < n; ++j) {
if((k & (1 << j)) && (k & 1 << (j + 1))) flag = 0;
if(!b[i][j] && (k & (1 << j))) flag = 0;
}
if(!flag) continue;
if(i == 0) {
f[i][k] = 1;
continue;
}
for(int j = 0; j < 1 << n; ++j) {
if((j & k) == 0)
f[i][k] = (f[i][k] + f[i - 1][j]) % mod;
}
}
}
int ans = 0;
for(int j = 0; j < 1 << n; ++j)
ans = (ans + f[m - 1][j]) % mod;
cout << ans;
return 0;
}
【DP】【状压DP】
猜你喜欢
转载自blog.csdn.net/qq_41829380/article/details/105695572
今日推荐
周排行