uva 11464 Even Parity
https://vjudge.net/problem/UVA-11464
题意:
给出一个0,1矩阵,现在要求把这个矩阵中的某些0改为1,使得这个矩阵中每个格子的上下左右格子(如果存在)的值之和为偶数,问最少的改变次数,不能达到要求输出-1。
思路:
其实,只要第一行的状态定了,接下来所有行的状态就已经定了,这是经过手算得出的结果。根据一个格子的上左右的值之和,就可以确定它下面的格子的状态。
那么,只需要枚举第一行的状态就可以了,用二进制枚举的方法。
接下来,判断这个矩阵是否满足要求,注意的地方是,如果说原矩阵中为1的在改变后的矩阵中为0,那么这个肯定是不符合要求的,因为只能把0改为1,不能把1改为0。
代码:
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 6 int a[20][20]; 7 int b[20][20]; 8 9 int main() 10 { 11 int t; 12 13 scanf("%d",&t); 14 15 int cas =0 ; 16 17 while (t--) 18 { 19 int n; 20 21 scanf("%d",&n); 22 23 for (int i = 0;i < n;i++) 24 for (int j = 0;j < n;j++) 25 scanf("%d",&a[i][j]); 26 27 int k = (1 << n); 28 29 int ans = 1000000; 30 31 for (int i = 0;i < k;i++) 32 { 33 for (int j = 0;j < n;j++) 34 { 35 if ((1 << j) & i) b[0][j] = 1; 36 else b[0][j] = 0; 37 } 38 39 for (int x = 0;x < n - 1;x++) 40 for (int y = 0;y < n;y++) 41 { 42 int sum = 0; 43 44 if (x - 1 >= 0) sum += b[x-1][y]; 45 if (y - 1 >= 0) sum += b[x][y-1]; 46 if (y + 1 < n) sum += b[x][y+1]; 47 48 if (sum & 1) b[x+1][y] = 1; 49 else b[x+1][y] = 0; 50 } 51 52 int tmp = 0; 53 54 bool f = 0; 55 56 for (int x = 0;x < n;x++) 57 for (int y = 0;y < n;y++) 58 { 59 60 if (f) break; 61 62 if (a[x][y] == 0 && b[x][y] == 1) 63 { 64 tmp++; 65 } 66 else if (a[x][y] == 1 && b[x][y] == 0) 67 { 68 f = 1; 69 break; 70 } 71 } 72 73 74 if (f) continue; 75 else ans = min(ans,tmp); 76 } 77 78 if (ans == 1000000) 79 { 80 printf("Case %d: %d\n",++cas,-1); 81 } 82 else printf("Case %d: %d\n",++cas,ans); 83 } 84 85 return 0; 86 }
转载于:https://www.cnblogs.com/kickit/p/7592780.html
uva 11464 Even Parity相关推荐
- 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵
偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...
- Even Parity UVA - 11464 (枚举)
从来没有觉得枚举有多费脑子的.但是这道题还是很香的. 思路:就是非常简单的枚举啦. 从一般的枚举开始考虑.一般的做法就是在所有的格子中有两种状态1, 0. 而一共有225个格子,所有一共要枚举的情 ...
- Uva 11464 偶数矩阵
题目链接:https://uva.onlinejudge.org/external/114/11464.pdf 和开关问题类似,只不过现在是用的位运算操作更简单了,其中要注意的是,只能将0变成1. 1 ...
- OI 刷题记录——每周更新
每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...
- 训练指南第一部分解题报告
主要是提供训练指南第一部分解题报告链接,后面会持续更新中 307 - Sticks (DFS+剪枝) 11292 - Dragon of Loowater (贪心) 11729 - Commando ...
- even parity
转自http://www.acmerblog.com/uva-11464-even-parity-4653.html 这道题的算法实现态变态了,奇妙的技巧,至少我是这样认为的.我想了很久也不会,书上代 ...
- [搜索]UVa 129 困难的串
题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...
- uva 401.Palindromes
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- Uva 3767 Dynamic len(set(a[L:R])) 树套树
Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...
最新文章
- ​利用卷积神经网络学习脑电地形图表示进行分类
- BinaryReader 、BinaryWriter是方便用二进制方式读写int,double,string之类的数据
- 【Touchinput 】触摸和输入 概述(1)
- 三维建模:方法之CSG与B-Rep比较
- 梦真的是反的 | 今日最佳
- php语法基础考试,我的php学习第二十六天——PHP基础语法
- ubuntu常用状态查看命令
- C语言中的指针型函数值
- win10 快捷键大全(集合)
- Caused by: java.io.IOException: ZIP entry size is too large
- matlab量化股票基本面,获取数据 - MATLAB - 掘金量化
- 如何测量智能产品的AI智商水平,论AI的三种智商
- IOS开发之相机、相册页面英文问题
- 好消息,高清版谷歌卫星地图终于可以正常使用了
- 《张萌:高效能人士的自我管理》学习笔记
- 联想Y471A加装固态硬盘及解决启动黑屏问题
- rt-thread+SAL+W5500 以太网Socket通信
- 2020-08-23腾讯笔试 删除节点 数字拆分
- 全球与中国聚氨酯同步带市场深度研究分析报告
- 【CQgame】[幸运方块 v1.1.3] [Lucky_Block v1.1.3]