UVA 11464 Even Parity(部分枚举 递推)
Even Parity
We have a grid of size N x N. Each cell of the grid initially contains a zero(0) or a one(1).
The parity of a cell is the number of 1s surrounding that cell. A cell is surrounded by at most 4 cells (top, bottom, left, right).
Suppose we have a grid of size 4 x 4:
|
1 |
0 |
1 |
0 |
The parity of each cell would be |
1 |
3 |
1 |
2 |
|
1 |
1 |
1 |
1 |
2 |
3 |
3 |
1 |
|
|
0 |
1 |
0 |
0 |
2 |
1 |
2 |
1 |
|
|
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
For this problem, you have to change some of the 0s to 1s so that the parity of every cell becomes even. We are interested in the minimum number of transformations of 0 to 1 that is needed to achieve the desired requirement.
Input
The first line of input is an integer T (T<30) that indicates the number of test cases. Each case starts with a positive integer N(1≤N≤15). Each of the next N lines contain N integers (0/1) each. The integers are separated by a single space character.
Output
For each case, output the case number followed by the minimum number of transformations required. If it's impossible to achieve the desired result, then output -1 instead.
Sample Input
3
3
0 0 0
0 0 0
0 0 0
3
0 0 0
1 0 0
0 0 0
3
1 1 1
1 1 1
0 0 0
Output for Sample Input
Case 1: 0
Case 2: 3
Case 3: -1
题目大意:给你一个n*n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上、下、左、右的元素(如果存在的话)之和均为偶数。
分析:偶数矩阵,关灯游戏改版。直接枚举会超时。注意到n只有15,第一行只有不超过2^15=32768中可能,所以第一行的情况可以枚举。接下来根据第一行可以完全计算出第2行,根据第二行又能计算出第三行...
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = ;
const int INF = ;
int n, A[maxn][maxn], B[maxn][maxn]; int check(int s) {
memset(B, , sizeof(B));
for(int c = ; c < n; c++) {
if(s & (<<c)) B[][c] = ;
else if(A[][c] == ) return INF; // 1不能变成0
}
for(int r = ; r < n; r++)
for(int c = ; c < n; c++) {
int sum = ; // 元素B[r-1][c]的上、左、右3个元素之和
if(r > ) sum += B[r-][c];
if(c > ) sum += B[r-][c-];
if(c < n-) sum += B[r-][c+];
B[r][c] = sum % ;
if(A[r][c] == && B[r][c] == ) return INF; // 1不能变成0
}
int cnt = ;
for(int r = ; r < n; r++)
for(int c = ; c < n; c++) if(A[r][c] != B[r][c]) cnt++;
return cnt;
} int main() {
int T;
scanf("%d", &T);
for(int kase = ; kase <= T; kase++) {
scanf("%d", &n);
for(int r = ; r < n; r++)
for(int c = ; c < n; c++) scanf("%d", &A[r][c]); int ans = INF;
for(int s = ; s < (<<n); s++)
ans = min(ans, check(s));
if(ans == INF) ans = -;
printf("Case %d: %d\n", kase, ans);
}
return ;
}
UVA 11464 Even Parity(部分枚举 递推)的更多相关文章
- 状态压缩+枚举 UVA 11464 Even Parity
题目传送门 /* 题意:求最少改变多少个0成1,使得每一个元素四周的和为偶数 状态压缩+枚举:枚举第一行的所有可能(1<<n),下一行完全能够由上一行递推出来,b数组保存该位置需要填什么 ...
- UVA.11464 Even Parity (思维题 开关问题)
UVA.11464 Even Parity (思维题 开关问题) 题目大意 给出一个n*n的01方格,现在要求将其中的一些0转换为1,使得每个方格的上下左右格子的数字和为偶数(如果存在的话),求使得最 ...
- HRBUST 1211 火车上的人数【数论解方程/模拟之枚举+递推】
火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起(包括第3站 ...
- UVA - 590Always on the run(递推)
题目:UVA - 590Always on the run(递推) 题目大意:有一个小偷如今在计划着逃跑的路线,可是又想省机票费. 他刚開始在城市1,必须K天都在这N个城市里跑来跑去.最后一天达到城市 ...
- UVA 11464 Even Parity(递归枚举)
11464 - Even Parity Time limit: 3.000 seconds We have a grid of size N x N. Each cell of the grid in ...
- 【UVA】11464 Even Parity(枚举子集)
题目 传送门:QWQ 分析 标准的套路题. 枚举第一行,接着根据第一行递推下面的行. 时间复杂度$ O(2^n \times n^2) $ 代码 #include <bits/stdc++.h& ...
- hdu5965扫雷 枚举+递推
题目链接 思路:枚举第一列的可能种数,然后递推即可,中途判断是否满足条件,最后再判断最后一列是否满足条件即可. #include<bits/stdc++.h> #define LL lon ...
- UVA 10943 - How do you add? 递推
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- UVa 926【简单dp,递推】
UVa 926 题意:给定N*N的街道图和起始点,有些街道不能走,问从起点到终点有多少种走法. 很基础的dp.递推,但是有两个地方需要注意,在标记当前点某个方向不能走时,也要同时标记对应方向上的对应点 ...
- UVa 825【简单dp,递推】
UVa 825 题意:给定一个网格图(街道图),其中有一些交叉路口点不能走.问从西北角走到东南角最短走法有多少种.(好像没看到给数据范围...) 简单的递推吧,当然也就是最简单的动归了.显然最短路长度 ...
随机推荐
- Android 单字阅读
package com.desmand.screencapture; import android.app.Activity; import android.content.Intent; impor ...
- HW5.3
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- Solution for When browse http://xxx/ReportServer Show Error (rsAccessDenied)
Issue: Reporting Services Error The permissions granted to user 'IDEAAM\William' are insufficient fo ...
- (android 源码下开发应用程序) 如何在 Android 各 level ( 包含 user space 與 kernel space ) 使用dump call stack的方法
http://janbarry0914.blogspot.com/2014/07/androiddump-call-stack.html dump call stack [文章重點] 了解 Andro ...
- ServletContext获取项目真实路径
import javax.servlet.ServletContext; import org.springframework.web.context.ServletContextAware; /** ...
- PTA 5-12 How Long Does It Take (25分)
这题看不太懂题目啊~ 参考的http://blog.csdn.net/qq_26437925/article/details/49420089?locationNum=6&fps=1 先放着 ...
- POJ3111 K Best
Description Demy has n jewels. Each of her jewels has some value vi and weight wi. Since her husband ...
- HTML 的 iframe 元素
在 HTML 中, iframe 元素用于在网页中嵌入其它网页的内容,例如: <iframe src="http://example.com/abc.html">ifr ...
- CCS样式表小结
CSS(Cascading Style Sheet,叠层样式表),作用是美化HTML网页. /*注释区域*/ 此为注释语法 一.样式表 (一)样式表的分类 1.内联样式表 和HTML联合显示,控 ...
- MVC模式网站编写经验总结
单个网站使用MVC架构模式经验总结,包含具体网站包分类.包内类的编写.注意事项等方面.本人认为,按照如下包分类及编写方法,已经满足一个简单普通网站(主要针对java)的编写需求. MVC主要层级 数据 ...