• UVA11464偶数矩阵


    题意:
          给你一个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 " ,cas ++ ,Ans);
        }
        return 0;
    }
          

  • 相关阅读:
    doT.js——前端javascript模板引擎问题备忘录
    (转)regex类(个人理解)
    ajax提交表单、ajax实现文件上传
    SQL添加表字段
    Elasticsearch使用总结
    有一张表里面有上百万的数据,在做查询的时候,如何优化?从数据库端,java端和查询语句上回答
    sql语句的字段转成Date
    Mybatis 示例之 foreach
    Eclipse不编译解决方案
    Java使用RSA加密解密及签名校验
  • 原文地址:https://www.cnblogs.com/csnd/p/12062548.html
Copyright © 2020-2023  润新知