UVA 11464 - Even Parity
来源:互联网 发布:昆明医科大学网络课程 编辑:程序博客网 时间:2024/06/03 10:18
该题也是一个需要观察和等价转换思维的题目。 如果直接暴力,时间复杂度难以承受,但是其实我们可以发现,只需要枚举第一行就可以了,只要第一行确定了,那么最终的偶数矩阵也就确定了,可以利用偶数限制关系轻松推出其他的格子,在这个过程中判断是否符合规则即可。
细节参见代码:
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 10000000;const int maxn = 20 + 5;int T,n,m,ans,kase = 0,cur,a[maxn][maxn];bool check(int S) { int vis[maxn][maxn]; for(int i = 0; i < n; i++) { if(S & (1 << i)) { if(a[1][i+1] == 0) cur++; vis[1][i+1] = 1; } else { if(a[1][i+1]) return false; vis[1][i+1] = 0; } } for(int i = 2; i <= n; i++) { for(int j = 1; j <= n; j++) { int v = 0; if(j > 1) v += vis[i-1][j-1]; if(j < n) v += vis[i-1][j+1]; if(i-1 > 1) v += vis[i-2][j]; if(v & 1) vis[i][j] = 1; else vis[i][j] = 0; if(a[i][j] == 1 && vis[i][j] == 0) return false; if(a[i][j] == 0 && vis[i][j] == 1) cur++; } } return true;}int main() { scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) scanf("%d",&a[i][j]); ans = INF; for(int i = 0; i < (1 << n); i++) { cur = 0; if(check(i)) ans = min(ans,cur); } printf("Case %d: %d\n",++kase,(ans == INF ? -1 : ans)); } return 0;}
0 0
- UVA 11464 - Even Parity
- uva 11464 - Even Parity
- Uva-11464-Even Parity
- uva 11464Even Parity
- Uva 11464 - Even Parity
- Uva 11464 - Even Parity
- uva 11464 - Even Parity
- UVA 11464 Even Parity
- UVA 11464 Even Parity
- Even Parity UVA 11464
- UVA - 11464 Even Parity
- UVA - 11464 Even Parity
- UVa:11464 Even Parity
- Uva 11464 Even Parity
- UVA 11464 Even Parity
- UVa 11464 Even Parity
- UVA - 11464 Even Parity
- Even Parity Uva 11464 ,
- Ubuntu安装单机版hadoop注意事项
- getParameter和getAttribute的区别是什么?
- hdu 5135__Little Zu Chongzhi's Triangles
- Ember
- 黑马程序员—UNIX基本指令及第一个Objective-C程序
- UVA 11464 - Even Parity
- 京东股权众筹投后总结和反思
- ZOJ-1649 Rescue
- Session对象的特点
- 计算几何--简单多边形与圆面积交
- HDU 5489 Removed Interval (LIS,变形)
- 京东股权众筹投后总结和反思2(冲动不要紧,有后悔药)
- 0SX10.11 启动盘
- hdu 5131__Song Jiang's rank list