📄 3118366_ac_0ms_436k.cpp
字号:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int infertile[13] = {0};
int dp[13][4096];
int R, C, C2;
vector<int> valid;
cin >> R >> C;
C2 = 1 << C;
fill(infertile, infertile + R, 0);
for (int i = 0; i < R; i++)
{
for (int j = 0; j < C; j++)
{
int x;
cin >> x;
if (!x) infertile[i + 1] |= 1 << j;
}
}
for ( i = 0; i < C2; i++){
if (!(i & (i << 1)))
{
valid.push_back(i);
}
}
fill(dp[0], dp[0] + C2, 1);
for (i = 1; i <= R; i++)
{
fill(dp[i], dp[i] + C2, 0);
for (int j = 0; j < C2; j++)
{
if (~j & infertile[i]) continue;
for (size_t k = 0; k < valid.size(); k++)
{
int u = valid[k];
if (u & j) continue;
dp[i][j] += dp[i - 1][u | infertile[i - 1]];
dp[i][j] %= 100000000;
}
}
}
cout << dp[R][infertile[R]] << "\n";
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -