题意:
      给你一个n*n的01矩阵,你的你的任务是吧尽量少的0变成1,使得每个元素的上下左右之和均为偶数(如果有的话),比如
0 0 0         0 1 0
1 0 0  --->   1 0 1   
0 0 0         0 1 0
是变换了3个。

思路:
      这个题目拿到手的最暴力的反应就是直接搜索枚举所有,那么时间复杂度是
O(2^(15*15))直接就跪了,其实这个题目有个很关键的突破口,就是只要第一行确定了,那么其他的都是确定的,这个可以自己找几个矩阵试验下,所以我们可以直接深搜去枚举第一行,然后根据第一行吧所有的都填充完,看看有没有冲突,如果没有就更新答案的最优值,这样的时间复杂度是O(2^15*15*15) = O(32768 * 225)没啥大压力。

#include<stdio.h>

int map[16][16] ,now[16][16];
int Ans ,n;

void DFS(int noww)
{
   if(noww == n + 1)
   {
      int tmp = 0; 
      for(int i = 1 ;i <= n ;i ++)
      if(!map[1][i] && now[1][i]) tmp ++;   
      for(int i = 2 ;i <= n ;i ++)
      for(int j = 1 ;j <= n ;j ++)
      {
          int ss = 0 ,nowi = i - 1 ,nowj = j;
          if(nowi >= 2) ss += now[nowi-1][j];
          if(nowj >= 2) ss += now[nowi][j-1];
          if(nowj <= n-1) ss += now[nowi][j+1];
          now[i][j] = ss % 2;
          if(!map[i][j] && now[i][j]) tmp ++;
          if(map[i][j] && !now[i][j]) return;
      }
      if(Ans == -1 || Ans > tmp) Ans = tmp;
      return;
   }
   
   now[1][noww] = 1;
   DFS(noww+1);
   if(!map[1][noww])
   {
       now[1][noww] = 0;
       DFS(noww+1);
   }
}

int main ()
{
    int i ,j ,t ,cas = 1;
    scanf("%d" ,&t);
    while(t--)
    {
       scanf("%d" ,&n);
       for(i = 1 ;i <= n ;i ++)
       for(j = 1 ;j <= n ;j ++)
       scanf("%d" ,&map[i][j]);
       Ans = -1;
       DFS(1);
       printf("Case %d: %d\n" ,cas ++ ,Ans);
    }
    return 0;
}
      

UVA11464偶数矩阵相关推荐

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

    偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...

  2. Uva 11464 偶数矩阵

    题目链接:https://uva.onlinejudge.org/external/114/11464.pdf 和开关问题类似,只不过现在是用的位运算操作更简单了,其中要注意的是,只能将0变成1. 1 ...

  3. Z字形扫描(对矩阵进行Z字形扫描)

    问题描述: 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 ...

  4. even parity

    转自http://www.acmerblog.com/uva-11464-even-parity-4653.html 这道题的算法实现态变态了,奇妙的技巧,至少我是这样认为的.我想了很久也不会,书上代 ...

  5. C++矩阵的对角线之和

    下面我会围绕奇数型矩阵和偶数型矩阵来展开. 什么是奇数型矩阵? eg.a[3][3].a[5][5].a[7][7].a[9][9]- 什么是偶数型矩阵? eg.a[4][4].a[6][6].a[8 ...

  6. 基于IOS平台的游戏之小拼图

    IOS/Xcode工具 一:主要功能 在拼图小游戏开发过程中,实现的主要的功能. 压缩图片:需要给传递过来的任意图片,根据手机模拟器中View大小,重新设置图片的尺寸,即压缩图片运用UIGraphic ...

  7. #161: 给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。 你的任务就是检测矩阵是否符合条件...

    试题描述给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件. 你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件. "改变矩 ...

  8. 《剑指offer》-- 调整数组顺序使奇数位于偶数前面、顺时针打印矩阵、数字在排序数组中出现的次数

    一.调整数组顺序使奇数位于偶数前面: 1.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之 ...

  9. Java黑皮书课后题第8章:*8.23(游戏:找到翻转的单元格)假定给定一个填满0和1的6*6矩阵,所有的行和列都有偶数个1。让用户翻转一个单元,编写一个程序找到哪个单元格被翻转了

    *8.23(游戏:找到翻转的单元格)假定给定一个填满0和1的6*6矩阵,所有的行和列都有偶数个1.让用户翻转一个单元,编写一个程序找到哪个单元格被翻转了 题目 题目描述与运行示例 破题 代码 题目 题 ...

最新文章

  1. (转)Spring中ThreadLocal的认识
  2. [USACO07NOV]牛继电器Cow Relays
  3. Python的threading多线程
  4. mysql的四层架构_分布式数据库服务器的四层架构
  5. 萝卜源码前后端源码 附打包APP的教程
  6. JVM 学习笔记(二)垃圾回收
  7. Hp-socket高性能网络库三--tcp组件pack接收模型
  8. 中间件 | 负载均衡策略
  9. gitlab安装后出现的web IDE显示报错问题
  10. Cat源码分析(三):10种分析器
  11. 全自动 TSPITR--基于RMAN-LOGSEQ
  12. 【Unity3D】Unity3D 软件安装 ( 注册账号并下载 Unity Hub | 安装 Unity Hub | 获取个人版授权 | 中文环境设置 | 安装 Unity3D 编辑器 )
  13. EBS开发_创建AP付款
  14. JavaWeb 打开的默认主页设置问题
  15. 科幻大作明日边缘首曝预告
  16. 一文讲透云计算、大数据与人工智能三者之间的关系!
  17. 通过VISA库实现GPIB通信
  18. Windows server 2008 关闭135端口
  19. 转载 中文字符集编码Unicode ,gb2312 , cp936 ,GBK,GB18030
  20. Android学习笔记3---仿微信登录界面

热门文章

  1. Reveal 的初步用法
  2. 从责任界定和问题预警角度 解读全栈溯源对DevOps的价值
  3. 学习HTML5之塔克大战(详细记录)
  4. 浅谈ThreadPool 线程池(引用)
  5. sharepoint 2010 显示和隐藏Ribbon区域条
  6. 深入浅出之Smarty模板引擎工作机制(一)
  7. python:argparse命令行解析模块详解
  8. 10款jQuery/CSS3动画应用 超有用
  9. Automatic Summarization of Bug Reports
  10. NOIP2012 文化之旅