2 条题解

  • 0
    @ 2025-12-28 18:33:59

    #include #include #include using namespace std;

    const int MOD = 100000000;

    int main() { int M, N; bool bbb; cin >> M >> N; vector<vector> grid(M, vector(N)); for (int i = 0; i < M; ++i) for (int j = 0; j < N; ++j) cin >> grid[i][j];
    vector<vector> v(M); for (int i = 0; i < M; ++i) for (int mask = 0; mask < (1 << N); ++mask) { bbb = 1; for (int j = 0; j < N - 1; ++j) if ((mask & (1 << j)) && (mask & (1 << (j + 1)))) { bbb = 0; break; }
    for (int j = 0; j < N; ++j) if ((mask & (1 << j)) && grid[i][j] == 0) { bbb = 0; break; }
    if (bbb) v[i].push_back(mask);
    }
    vector<vector> dp(M, vector(1 << N, 0)); for (int mask : v[0]) dp[0][mask] = 1;
    for (int i = 1; i < M; ++i) for (int j : v[i]) for (int k : v[i - 1]) if ((j & k) == 0) dp[i][j] = (dp[i][j] + dp[i - 1][k]) % MOD;
    int ans = 0; for (int mask : v[M - 1]) ans = (ans + dp[M - 1][mask]) % MOD;
    cout << ans;
    }

    信息

    ID
    3293
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    100
    已通过
    15
    上传者