UVa 11464
来源:互联网 发布:mac os清理软件 编辑:程序博客网 时间:2024/05/29 14:18
简介:
每个元素上,下,左,右的元素之和为偶数
分析:
首先想到一定是暴搜啊(耿直),枚举每一个数字变还是不变,最后一起判断
然而这样的最多需要枚举2^255,这是完全不可能的(即使剪枝也没办法)
然而我们注意到n只有15,很符合枚举的条件啊
没错,我们这道题就是要枚举,
但是我们只枚举第一行
因为知道了第一行后,整个矩阵就都能计算出来了
tip
第一行的状态我们可以直接用二进制来枚举,这样超方便
//这里写代码片#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int INF=0x33333333;int a[20][20],b[20][20];int n;int check(int x){ memset(b,0,sizeof(b)); int i,j,k; for (i=n;i>=1;i--) { if (x&1) b[1][i]=1; if (!b[1][i]&&a[1][i]) return INF; //1不能变成0 x>>=1; } for (i=2;i<=n;i++) for (j=1;j<=n;j++) { int sum=0; if (i>2) sum+=b[i-2][j]; // 1 if (j>1) sum+=b[i-1][j-1]; // 2 3 if (j<n) sum+=b[i-1][j+1]; // x x的值取决于这三个位置 if (sum&1) b[i][j]=1; else b[i][j]=0; if (!b[i][j]&&a[i][j]) return INF; //1不能变成0 } int cnt=0; for (i=1;i<=n;i++) for (j=1;j<=n;j++) if (a[i][j]!=b[i][j]) cnt++; return cnt;}int main(){ int T; scanf("%d",&T); for (int cas=1;cas<=T;cas++) { scanf("%d",&n); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) scanf("%d",&a[i][j]); int ans=INF; for (int i=0;i<(1<<n);i++) ans=min(ans,check(i)); if (ans==INF) ans=-1; printf("Case %d: %d\n",cas,ans); }}
阅读全文
0 0
- 【UVA】uva 11464
- uva 11464
- uva 11464
- uva 11464
- UVa 11464
- UVa 11464
- 训练指南uva 11464
- Uva 11464 偶检验
- UVA 11464 - Even Parity
- uva 11464 - Even Parity
- Uva-11464-Even Parity
- uva 11464Even Parity
- uva 11464 偶数矩阵
- Uva 11464 - Even Parity
- Uva 11464 - Even Parity
- uva 11464 - Even Parity
- UVA 11464 Even Parity
- UVA 11464 Even Parity
- Reflection2017.10.14---The Preliminary Contest
- html+css学习笔记
- 解决CentOS 中部署JasperReport时出错的问题。错误:net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '宋体
- nginx 的负载均衡
- VMware Workstation 11.0.0 注册码
- UVa 11464
- CodeFroces NWERC 2015 E.Elementary Math(二分图)
- 洛谷P1273 有线电视网
- UVA 11374 Airport Express (最短路)
- 第七周项目二 建立链队算法库
- 坑人的OJ
- 寂寥的雨花,打在你的遮阳伞上,回忆,是那样刻骨铭心,若如初见。你,与我相爱了半生,却让我下半生寂寞地守候你,你的离开,是为了自己翱翔天空的梦想,是为了在天空,也能种下我们相思相爱的杜鹃雨。 而我,只
- Codeforces 861 D Polycarp's phone book(字典树模板)
- 数组奇数和