UVa 11464 Even Parity (想法题&部分枚举)

Even Parity(偶数矩阵) We have a grid of size Nx 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 (t 阅读详情

11464 - Even Parity

Time limit: 3.000 seconds

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=2459

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               Output for 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
                        

Case 1: 0 
Case 2: 3 
Case 3: -1                        


思路:枚举符合题意的第一行来推出下面的行,然后比较二者是否一样。

复杂度:

完整代码:

/*0.115s*/

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 20;
const int INF = 1000000000;

int 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; // 1不能变成0
	}
	for (int r = 1; r < n; r++)
		for (int c = 0; c < n; c++)
		{
			int sum = 0; // 元素B[r-1][c]的上、左、右3个元素之和
			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; // 1不能变成0
		}
	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(void)
{
	int T;
	scanf("%d", &T);
	for (int kase = 1; kase <= T; kase++)
	{
		scanf("%d", &n);
		for (int r = 0; r < n; r++)
			for (int c = 0; c < n; c++) 
                scanf("%d", &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", kase, ans);
	}
	return 0;
}


Java实现偶数矩阵(Even Parity, UVa 11464) 偶数矩阵(Even Parity, UVa 11464) 问题描述   给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1, 使得每个元素的上、下、左、右的元素(如果存在的话)之和均为偶数。 比如,如(a)所示的矩阵至少要把3个0变成1,最终如图(b)所示,才能保证其为偶数矩阵。 看图! 输入格式   输入的第一行为数据组数T(T≤30)。每组数据的第一行为正整数n(1≤n... 阅读详情

相关推荐

【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵

例题7  偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上、下、左、右的元素(如果存在的话)之和均为偶数。比如,如图1-6(a)所示的矩阵至少要把3个0变成1,最终如图1-6(b)所示,才能保证其为偶数矩阵。 【输入格式】 输入的第一行为数据组数T(T≤30)。每组数据的第一行为

学习之路 2068

11464-偶数矩阵

#include <cstdio> #include <iostream> #include <cstring> using namespace std; #define MAX 16 const int INF = (1<<29);int n; int a[MAX][MAX], b[MAX][MAX];inline int min(int a, int b) { return a < b

Leo-Ares的博客 681

PLCopen运动控制避坑指南:单轴功能块常见报错排查(基于SM3_Basic函数库)

本文深入解析PLCopen运动控制中单轴功能块的常见报错问题,基于SM3_Basic函数库提供实用排查指南。从功能块逻辑错误与硬件报错的甄别技巧到高频报错场景的解决方案,帮助工程师快速定位并解决运动控制系统中的稳定性问题,提升工业自动化设备的运行效率。

weixin_33686714的博客 316

UVA—11464

11464 Even Parity We have a grid of size N × 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 b

qq243887的专栏 383

技术前沿:半导体前道检测和量测设备修复技术

半导体前道检测设备是目前除光刻机外,国产渗透率较低的环节之一,近年来我国初步实现国产突破。前道检测相对后道检测环节壁垒更高,国内多家涉及后道测试,涉及前道检测和中道检测相对较少。

VOMMA的博客 4543

从零到一:嵌入式车载通信中间件VSOMEIP的跨平台构建之旅

本文详细介绍了嵌入式车载通信中间件VSOMEIP的跨平台构建过程,重点解析了交叉编译环境配置、Boost库编译、VSOMEIP定制化编译等关键技术环节。通过实战案例展示了在ARM架构嵌入式设备上的部署与调试方法,为开发者提供了一套完整的VSOMEIP嵌入式应用解决方案。

lilh34434的博客 196

UVA11464

#pragma warning(disable:4996) #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<vector> #include<algorithm> #include<iostream> #include<time.h> using namespace std;const int

JACK_JYH的博客 370

JOOQ用法和实例

jOOQ,是一个ORM框架,利用其生成的Java代码和流畅的API,可以快速构建有类型约束的安全的SQL语句。jOOQ的核心优势是可以将数据库表结构映射为Java类,包含表的基本描述和所有表字段。通过jOOQ提供的API,配合生成的Java代码,可以很方便的进行数据库操作生成的Java代码字段类型是根据数据库映射成的Java类型,在进行设置和查询操作时,因为是Java代码,都会有强类型校验,所以对于数据的输入,是天然安全的,极大的减少了SQL注入的风险。

m0_67403076的博客 1377

UVa 11464 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

BacktoWin 601

ARM与PC共享文件方式【samba】移植与配置

方式推荐指数适用平台优点缺点⭐⭐⭐⭐⭐全平台 (Win/Mac/Linux)兼容性最强,操作像本地文件配置稍繁琐,协议开销略大NFS⭐⭐⭐⭐Linux/Mac (Win支持一般)速度极快,CPU占用低Windows配置复杂,权限管理较难SFTP (SSH)⭐⭐⭐⭐全平台 (需客户端)安全加密,无需额外配置服务需使用FileZilla/Xftp等专用软件物理U盘⭐⭐⭐全平台无需网络,速度取决于接口需要人工插拔,不适合自动化Syncthing⭐⭐⭐⭐全平台自动同步,支持远程。

浩瀚之水的专栏 263

学Simulink——控制执行场景实例:基于Simulink的智能车辆电子稳定控制(ESC)仿真

本文完成了基于 Simulink 的智能车辆电子稳定控制(ESC),实现了:✅ 构建含轮胎非线性的车辆动力学模型✅ 设计滑模横摆稳定性控制器✅ 实现四轮制动力分配逻辑✅ 验证在双移线低附着场景下的卓越稳定性✅ 为主动安全控制系统开发提供完整范式。

xiaoheshang_123的博客 528

uva 11464 Even Parity(逐层递推)

uva 11464 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 su

总有那么一群人喜欢盯着我的博客看,估计这是他们见过最长的博客名,我必须得告诉他们博客名最长可以写多长 906

深信服全产品线新版图标库 Visio版+PPT版【2023年最新整理】

深信服全产品线新版图标库Visio版(含网络位置符号以及其他网络设备和外设图标)有朋友想要我整理一下深信服的相关图标,那么今天,瑞哥给老铁们整理了。运维漫谈是瑞哥针对运维领域的一个公众号,欢迎大家的关注哦!篇幅原因,就只展示那么多,有需要的朋友自行下载。SANGFOR 各产品图标-Visio版。你好,这里是网络技术联盟站。SANGFOR全产品线图标。深信服设备前置面板-AC。

网络技术联盟站 3694

uva 11464 - Even Parity(暴力枚举)

题目链接:uva 11464 - Even Parity 题目大意:给出一个由0和1组成的矩阵,修改最少的0变成1,使得矩阵中每个位置的上下左右存在的情况下,和为偶数,无解输出-1。 解题思路:枚举,但是枚举所有位置的话,n最大为15,有2^255,肯定超时。但是不难发现,如果确定了i行,那么i + 1行肯定是确定。所以只要枚举第一行就可以了。 #include #

不慌不忙、不急不躁 1802

Mamba SSM 实战:IMDb 文本分类 + Mamba-ssm 全流程

Mamba SSM 文本分类链路:IMDb 二分类 → MambaLMHeadModel (d_model=256, n_layer=8, d_state=16, exp2=2) → 末 token 分类头。5 epoch 达 89.2% 准确率 (与 BERT-base 持平), 但显存降低 44% (3.5GB vs 6.2GB)。建议序列长度 ≥ 1024 再选 Mamba, 短序列 (< 512) 用 BERT 更高效。扩展时注意d_state。

m0_71589036的博客 57

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

UVA.11464 Even Parity (思维题 开关问题)

UVA.11464 Even Parity (思维题 开关问题)题目大意给出一个n*n的01方格,现在要求将其中的一些0转换为1,使得每个方格的上下左右格子的数字和为偶数(如果存在的话),求使得最小的转换的个数。最先想到的是枚举每个方格的状态,非0即1,那么就有2^(n*n)种情况,可见数量之大,必定超时。那么就必须要转换思路。不难看出这是一个开关问题,就是说可以根据一行的数据,推算出下一行的数据,

Pengwill's Blog 577

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

UVA11464-Even Parity

uva11464(题目链接) 这个如果暴力枚举每一种情况的话,最多共有2^255种情况,显然行不通,但如果确定了第一行,就可以推出第二行,依次往下,而且枚举第一行的每种情况最多是2的15次方,还是可行的。(刘汝佳大佬给的二进制方法太牛了) #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include...

qq_43022818的博客 171

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex&trade;-M4F 内核的信息,请参见《Cortex&trade;-M4F 技术参考手册》。

Even Parity UVA - 11464 偶数矩阵 枚举

题目链接 We have a grid of size N N. Each cell of the grid initially contains a zero(0) or a one(1). The parityof a cell is the number of 1s surrounding that cell. A cell is surrounded by at most 4 ce...

Nicolas的博客 527

例题1.7 偶数矩阵 Even Parity UVA - 11464 部分枚举+递推

传送门 题目大意:给你一个n*n的01矩阵,你的任务时把尽量少的0变成1,使得每个数字的上下左右之和为偶数。只算存在的 解题思路:全部枚举时不可能的,枚举第一行的变化,那么第二行行就可以递推出来。(因为第一行上面一行不存在,所以是三个的和)。  那么第三行就可以根据第一行和第二行推出。 AC代码: #include #include #include #include #i

sky的博客 535

Even Parity UVA - 11464

问题 分析 枚举法,因为枚举全部的格子不现实,数量太多了,如果只枚举第一行,那么可以根据第一行推出第二行的情况,所以是可行的,时间复杂度O(n2∗2n)O(n^2*2^n)O(n2∗2n) #include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;algorithm&gt; #include &lt;cmath&gt; #incl...

zpf1998的博客 291

uva 11464 - Even Parity

题目:uva 11464 - Even Parity 思路:枚举第一行各个cell的奇偶状态,然后推出一次下一行的状态 #include #include #include #include #include using namespace std; int cnt[20][20],tmp[20][20]; int main() { int t; scanf(

shiyuan的专栏 961

Even Parity UVA - 11464 (枚举)

从来没有觉得枚举有多费脑子的。但是这道题还是很香的。 思路:就是非常简单的枚举啦。 从一般的枚举开始考虑。一般的做法就是在所有的格子中有两种状态1, 0. 而一共有225个格子,所有一共要枚举的情况就是2255我们大概粗略的计算一下10大约是23则,时间复杂度大概是1085而实际的情况比这个要高。肯定不行。    但是,通过打草稿发现,只要第一行确定了第二行一定是唯一的,同理第三行也是唯一...

weixin_33859665的博客 144

UVA:11464 Even Parity

解题思路:将第一行全部情况进行枚举(注意只对0转1,不能1转0),然后对于第一行的每种情况确定下面所有行的情况,并进行判断当前矩阵是否满足条件,求出最小的值注意事项:这种题不需要对所有元素枚举,只需要枚举第一行即可,后面几行可以由第一行决定               注意全局变量的使用,枚举第一行可以使用输入矩阵,但是后面后几行的改变时一定不可以使用输入矩阵直接更改               ...

宴夜小丑的博客 267
上一篇: UVa 10970 Big Chocolate (模拟)
下一篇: UVa 11384 Help is needed for Dexter (数学)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值