UVA11464 题解
思路分析
暴力枚举?
我们可以枚举每个数字变或不变,最后判断整个矩阵是否满足条件。但是,这样做最多需要枚举
大眼观察
注意到
程序实现
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 20;
const int INF = INT_MAX;
int T, n, A[MAXN][MAXN], B[MAXN][MAXN];
int check(int s) { // 检查+扩展
memset(B, 0, sizeof(B));
for (int c = 0; c < n; c++) {
if (s & (1 << c)) B[0][c] = 1;
else if (A[0][c] == 1) return INF;
}
for (int r = 1; r < n; r++)
for (int c = 0; c < n; c++) {
int sum = 0;
if (r > 1) sum += B[r - 2][c];
if (c > 0) sum += B[r - 1][c - 1];
if (c < n - 1) sum += B[r - 1][c + 1];
B[r][c] = sum % 2;
if (A[r][c] == 1 && B[r][c] == 0) return INF;
}
int cnt = 0;
for (int r = 0; r < n; r++)
for (int c = 0; c < n; c++)
if (A[r][c] != B[r][c])
cnt++;
return cnt;
}
int main() {
cin >> T;
for (int cnt = 1; cnt <= T; cnt++) {
cin >> n;
for (int r = 0; r < n; r++)
for (int c = 0; c < n; c++)
cin >> A[r][c];
int ans = INF;
for (int s = 0; s < (1 << n); s++)
ans = min(ans, check(s));
if (ans == INF) ans = -1;
printf("Case %d: %d\n", cnt, ans);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现