AcWing 327. 玉米田
原题链接
简单
作者:
总有刁民想害朕
,
2020-03-21 22:08:39
,
所有人可见
,
阅读 621
本题涉及到地图上有不能用的点的情况,那么就可以先把地图的情况读进来,再用后来的得到的摆放情况 和 地图 或 运算,如果不等于地图了就证明有不能用的点被用了,那么这个状态就是不合法
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N = 13, mod = 1e8;
int m,n;
int dp[N][1 << N];
int g[N];
int main(){
cin >> n >> m;
for(int i = 1;i <= n;++i)
for(int j = 0;j < m;++j){
int x;cin >> x;
if(x) g[i] |= (1 << (m - j - 1));
}
dp[0][0] = 1;
for(int i = 1;i <= n;++i)
for(int j = 0;j < 1 << m;++j)
for(int k = 0;k < 1 << m;++k)
if((j & (j << 1)) == 0 && (k & (k << 1)) == 0 && (j & k) == 0 && (j | g[i]) == g[i] && (k | g[i-1]) == g[i-1])
dp[i][j] = (dp[i][j] + dp[i-1][k]) % mod;
int ans = 0;
for(int j = 0;j < 1 << m;++j) ans = (ans + dp[n][j]) % mod;
cout << ans << endl;
}