蒙德里安的梦想(状态压缩DP) – 算法板子

// f[i][j] 前 i - 1 列铺满,j 以二进制形式表示第 i 列有值得情况(横着排支出来的情况) #include<bits/stdc++.h> using namespace std; const int N = 2048 + 10; typedef long long LL; LL f[15][N]; vector<int> p[N]; int n, m; int main() {      cin >> n >> m;     while (n != 0 && m != 0) {         for (int i = 0; i < (1 << n); ++i) {             p[i].clear();             for (int j = 0; j < (1 << n); ++j) {                 if (i & j) continue;                 bool valid = true;                 int cnt = 0;                 for (int k = 0; k < n; ++k) {                     if (i & (1 << k) || j & (1 << k)) {                         if (cnt & 1) {                             valid = false;                             break;                         }                         cnt = 0;                     } else {                         ++cnt;                     }                 }                 if (cnt & 1) {                     valid = false;                 }                 if (valid) {                     p[i].push_back(j);                 }             }         }          memset(f, 0, sizeof f);         f[0][0] = 1;         for (int i = 1; i <= m; ++i) {             for (int j = 0; j < (1 << n); ++j) {                 for (auto k : p[j]) {                     f[i][j] += f[i - 1][k];                 }             }         }         cout << f[m][0] << endl;         cin >> n >> m;     }     return 0; }

蒙德里安的梦想(状态压缩DP) – 算法板子leetcode刷题题解部分资料来自网络,侵权毕设源码联系删除

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 蒙德里安的梦想(状态压缩DP) – 算法板子leetcode刷题题解