开了 O2 100pts但是 hack 组没过
没开 O2 40pts hack 组没过
MY CODE:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9, _ = 15;
bool flag[_]; //judge
int R[_], dp[_][1 << 12 + 5], N, M;
signed main() {
// read
cin >> M >> N;
for (int i = 1; i <= M; i++)
for (int j = 1; j <= N; j++) {
int tempread;
cin >> tempread;
R[i] = (R[i] << 1) + tempread;
}
// init
for (int i = 0; i < (1 << N); i++)
flag[i] = ((!((i & (i << 1)))) && (!(i & (i >> 1))));
dp[0][0] = 1; //No Planting
// dp
for (int i = 1; i <= M; i++)
for (int j = 0; j < (1 << N); j++)
if (flag[j] && (j | R[i]) == R[i])
for (int k = 0; k < (1 << N); k++) {
if ((k & j)) continue;
dp[i][j] = (dp[i][j] + dp[i - 1][k]) % mod;
}
int ans = 0;
for (int i = 0; i < (1 << N); i++)
ans = (ans + dp[M][i]) % mod;
return (!printf("%lld", ans));
}
// ______________________________________
//|??????????????????????????????????????|
//|Submit by Acerkaio(Acerakoi || 514850)|
//|¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿|
//|______________________________________|