• Tom和Jerry在下棋


    题目描述

    方法:

    状压DP

    #include <cstdio>
    #define bc(x) (__builtin_popcount(x))
    const int mod = 998244353;
    const int maxn = 12;
    int f[maxn][1 << maxn][maxn * maxn];
    int main()
    {
        int n, m, p;
        scanf("%d%d%d", &n, &m, &p);
        for (int i = 0; i < 1 << m; ++i) f[1][i][bc(i)] = 1;
        for (int i = 2; i <= n; ++i)
        {
            for (int j = 0; j < 1 << m; ++j)
            {
                for (int k = 0; k < 1 << m; ++k)
                {
                    if ((j << 1) & k) continue;
                    if (j & (k << 1)) continue;
                    for (int l = p; l >= bc(k); --l) f[i][k][l] = (f[i][k][l] + f[i - 1][j][l - bc(k)]) % mod;
                }
            }
        }
        static int ans;
        for (int i = 0; i < 1 << m; ++i) ans = (ans + f[n][i][p]) % mod;
        printf("%d
    ", ans);
        return 0;
    }
  • 相关阅读:
    线程
    进程2
    进程
    socketserver
    黏包
    初始网络编程
    模块
    super
    mro c3算法
    日志固定格式
  • 原文地址:https://www.cnblogs.com/xmex/p/10099500.html
Copyright © 2020-2023  润新知