CF1391D-505 (思维结论 + 暴力 + 状压dp)
2021/8/25 23:06:51
本文主要是介绍CF1391D-505 (思维结论 + 暴力 + 状压dp),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
题目要求每一个长度为偶数的正方形里,1的个数都是奇数。
于是我们发现,一旦n >= 4同时 m >= 4那么一定是-1,奇+奇+奇+奇=偶
之后就剩下了三种可能性,n=1,n=2,n=3
于是考虑状压dp。
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; const int inf = 0x3f3f3f3f; ///1061109567 const int maxn = 1e6 + 10; int n, m; int all; int f[maxn][10]; vector<string> s; ///计算当前当前列到state状态需要的花费 int cal(int p, int state) { bitset<3> bt(state); int cnt = 0; for (int i = 0; i < n; ++ i) { if (bt[i] != s[i][p]-'0') cnt ++; } return cnt; } ///判断是否可以由st1转移到st2(判断合起来是否都是奇数1 bool check(int st1, int st2) { for (int i = 1; i < n; ++ i) { int cnt = ((st1>>i)&1) +((st1>>(i-1))&1) + ((st2>>i)&1) +((st2>>(i-1))&1); if (cnt % 2 == 0) return 0; } return 1; } ///在前面所有可以转移的状态里面取小 int premin(int j, int state) { int minn = 1e9; for (int pre = 0; pre < all; ++ pre) { if (check(pre, state)) minn = min(minn, f[j-1][pre]); } return minn; } int getans(int n) { if (n >= 4) return -1; ///性质 if (n == 1) return 0; all = 1 << n; ///初始化 for (int i = 0; i < all; ++ i) { f[0][i] = cal(0, i); } ///dp for (int j = 1; j < m; ++ j) { for (int i = 0; i < all; ++ i) { f[j][i] = premin(j, i) + cal(j, i); } } int ans = 1e9; for (int i = 0; i < all; ++ i) ans = min(ans, f[m-1][i]); return ans; } int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++ i) { string t; cin >> t; s.push_back(t); } cout << getans(n) << endl; return 0; }
这篇关于CF1391D-505 (思维结论 + 暴力 + 状压dp)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)
- 2025-01-03停止思考数据管道,开始构建数据平台:介绍Analytics Engineering Framework
- 2025-01-03如果 Azure-Samples/aks-store-demo 使用了 Score 会怎样?
- 2025-01-03Apache Flink概述:实时数据处理的利器
- 2025-01-01使用 SVN合并操作时,怎么解决冲突的情况?-icode9专业技术文章分享
- 2025-01-01告别Anaconda?试试这些替代品吧
- 2024-12-31自学记录鸿蒙API 13:实现人脸比对Core Vision Face Comparator