题意:有一个n*n的01矩阵,任务是把尽可能少的0变成1,使得每个元素的上、下、左、右元素之和为偶数。

思路:很容易想到的思路是枚举每个点是0还是1,因为n<=15,复杂度就是2^225显然TLE。注意到每次确定一样以后,下一行就是可以被确定的!所以,只要枚举第一行的状态,就可以推出每一行的状态,复杂度是15*2^15,。

#include<cstdio>
#include<iostream>
#define INF 0x3f3f3f3f
#define MAXN 20
using namespace std; int n,ori[MAXN][MAXN],t[MAXN][MAXN],dx[]={0,0,-1},dy[]={1,-1,0},ans,ca=0,T; bool f(int x,int y)
{
    int sum=0;
    for(int i=0;i<3;++i)
        if(x+dx[i]>=0 && y+dy[i]>=0 && x+dx[i]<n && y+dy[i]<n) sum+=t[x+dx[i]][y+dy[i]];
    return sum&1;
} bool generate(int x,int &sum)//x>0
{
    for(int i=0;i<n;++i)
        if(f(x-1,i))
        {
            t[x][i]=1;
            if(!ori[x][i]) ++sum;
        }
        else
        {
            if(ori[x][i]) {sum=INF;return 0;}
            t[x][i]=0;
        }
    return 1;
} int solve(int pre)
{
    int sum=pre;
    for(int i=1;i<n;++i) if(!generate(i,sum)) break;
    return sum;
} void dfs(int pos,int step)
{
    if(pos>=n) {ans=min(ans,solve(step));return;}
    if(ori[0][pos]) {t[0][pos]=1;dfs(pos+1,step);}
    else
    {
        t[0][pos]=0; dfs(pos+1,step);
        t[0][pos]=1; dfs(pos+1,step+1);
    }
} int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;++i)
            for(int j=0;j<n;++j) scanf("%d",&ori[i][j]);
        ans=INF;
        dfs(0,0);
        printf("Case %d: %d\n",++ca,ans>=INF? -1:ans);
    }
    return 0;
}

UVA 11464 Even Parity (独特思路)的更多相关文章

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

    UVA.11464 Even Parity (思维题 开关问题) 题目大意 给出一个n*n的01方格,现在要求将其中的一些0转换为1,使得每个方格的上下左右格子的数字和为偶数(如果存在的话),求使得最 ...

  2. 状态压缩+枚举 UVA 11464 Even Parity

    题目传送门 /* 题意:求最少改变多少个0成1,使得每一个元素四周的和为偶数 状态压缩+枚举:枚举第一行的所有可能(1<<n),下一行完全能够由上一行递推出来,b数组保存该位置需要填什么 ...

  3. 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 ...

  4. UVA 11464 - Even Parity(枚举方法)

    D Even Parity Input: Standard Input Output: Standard Output We have a grid of size N x N. Each cell ...

  5. UVA 11464 - Even Parity 状态压缩,分析 难度: 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  6. 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 on ...

  7. UVA - 11464 Even Parity 【暴力枚举】

    题意 给出一个 01 二维方阵 可以将里面的 0 改成1 但是 不能够 将 1 改成 0 然后这个方阵 会对应另外一个 方阵 另外一个方阵当中的元素 为 上 下 左 右 四个元素(如果存在)的和 要求 ...

  8. 【转载】UVa 11464 Even Parity 偶数矩阵

    题意:给你一个n*n的01矩阵,让你把这个矩阵中尽量少的0转换成1,使得矩阵每个位置的上下左右四个相邻的数加起来能被2整除,求最少的转换数 首先,n 的规模并不大,最大只有15.但是完全枚举整个矩阵显 ...

  9. UVa 11464 - Even Parity

    解题报告:题目大意有一个N×N的矩阵,矩阵中的元素只有1或0,如果说对于一个矩阵,它的所有的点的上下左右的点的和是偶数,则称这个矩阵为偶数矩阵,现在给你一个任意的矩阵,要求的是如果要把这个矩阵变成偶数 ...

随机推荐

  1. django 启动nginx的时候,报端口被占用的问题

    Nginx [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use) Nginx更新后经常遇到这样 ...

  2. kotlin 视频

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha

  3. 1265. [NOIP2012] 同余方程

    1265. [NOIP2012] 同余方程 ★☆   输入文件:mod.in   输出文件:mod.out   简单对比 时间限制:1 s   内存限制:128 MB [题目描述] 求关于 x 的同余 ...

  4. BZOJ3522&4543 [POI2014]Hotel加强版 长链剖分

    上上周见fc爷用长链剖分秒题 于是偷偷学一学 3522的数据范围很小 可以暴力枚举每个点作为根节点来dp 复杂度$O(n^2)$ 考虑令$f[x][j]$表示以$x$为根的子树内距离$x$为$j$的点 ...

  5. 通过yum来安装vsftpd

    Linux系统:centos6.6.  安装步骤  1.通过yum来安装vsftpd [root@localhost ~]# yum -y install vsftpd 2.设置为开机启动 [root ...

  6. Oracle sql语句中(+)作用

    select * from operator_info o, group_info g  where o.group_id = g.group_id(+); 理解:    + 表示补充,即哪个表有加号 ...

  7. Node.js学习笔记(2) - Node.js安装及入门hello world

    今天来简单的记录一下Node.js的安装配置以及简单的入门 一.Node.js的安装 1.windows下的安装 windows下的安装很简单,只需要去官网http://nodejs.org中,找到w ...

  8. JetBrains 系列软件汉化包

    原文地址:https://blog.csdn.net/pingfangx/article/details/78826145 JetBrains 系列软件汉化包 关键字: Android Studio ...

  9. [Winform]使用winform制作远程桌面管理工具

    摘要 突然在园子里看到一篇远程连接的文章,觉得挺好玩的,就自己尝试能不能自己制作一个可以管理多台远程连接的工具,说做就做.当然这样的管理工具已经很多,纯粹是为了好玩,采用winform做的. 资料 首 ...

  10. 读 Zepto 源码系列

    虽然最近工作中没有怎么用 zepto ,但是据说 zepto 的源码比较简单,而且网上的资料也比较多,所以我就挑了 zepto 下手,希望能为以后阅读其他框架的源码打下基础吧. 源码版本 本文阅读的源 ...