uva11464(二进制枚举)

uva11464Even Parity(偶数矩阵) 题目大意:给你一个n*n的矩阵,每个元素不是0就是1,你的任务是把尽量少的0变成1,使得每个元素的上下左右元素(如果存在的话)之和均为偶数。对于每组测试数据,输出被改变的元素的最小个数,如果无解,应输出-1。 思路:枚举第一行变得情况,第二行完全可以由第一行计算出来,以此类推计算接下来各行,时间复杂度O(2^n*n^2) #include #include #define INF 100000 阅读详情

Even Parity

题意:给你n*n的矩阵,上面的元素不是0就是1,现在要求你把一些0变成1,使得矩阵中每一个元素上下左右和(存在的话)加起来为偶数,求最少的操作数。
思路:如果简单的暴力枚举的话会超时。我们可以枚举矩阵第一行的变化情况,然后往下推出下一行的变化情况(枚举每一个已知行的元素,如果当前元素不符合要求,查看该点下方是否可以从0变为1,不可以则这种方案不行,因为只有该点下方的那点在已知行外),
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <algorithm>
#include <functional>
#define inf 1000000
using namespace std;
typedef long long ll;
const int MAXN=1e5+10;
const int MAX=100+10;
const double eps=1e-6;

int n;
int mapp[MAX][MAX];
int vis[MAX],t[MAX][MAX];
int d[6][3]={{-1,0},{1,0},{0,-1},{0,1}};

int solve(){
    int ans=0;
    for(int i=0;i<n;i++){
        t[0][i]=vis[i];
        if(mapp[0][i]==1&&vis[i]==0)
            return -1;
        if(mapp[0][i]==0&&vis[i]==1)
            ans++;
    }
    for(int i=1;i<n;i++){
        for(int j=0;j<n;j++){
            t[i][j]=mapp[i][j];
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            int sum=0;
            for(int k=0;k<=3;k++){
                int xt=i+d[k][0];
                int yt=j+d[k][1];
                if(xt>=0&&xt<n&&yt>=0&&yt<n)
                    sum+=t[xt][yt];
            }
            if(sum%2==1){
                if(i==n-1)
                    return -1;
                if(i+1<n&&t[i+1][j]==0){
                    ans++;
                    t[i+1][j]=1;
                }
                else if(i+1<n&&t[i+1][j]==1){
                    //cout<<"*"<<endl;
                    return -1;
                }
            }
        }
    }
    return ans;
}

int main(){
    #ifdef ONLINE_JUDGE
    #else
    freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    #endif

    int T,flag=1;
    cin>>T;
    while(T--){
        cin>>n;
        printf("Case %d: ",flag++);
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                cin>>mapp[i][j];
            }
        }
        int ans=inf;
        for(int i=0;i<(1<<n);i++){
            memset(vis,0,sizeof(vis));
            for(int j=0;j<n;j++){
                if(i&(1<<j)){
                    vis[j]=1;
                }
            }
            int temp=solve();
            if(temp!=-1&&temp<ans){
                ans=temp;
            }
        }
        if(ans==inf)
            cout<<-1<<endl;
        else
            cout<<ans<<endl;
    }

    return 0;   
}
cordic算法的FPGA实现 cordic 算法的MATLAB仿真及verilog实现 阅读详情

相关推荐

别再硬拔了!用这3个终端命令轻松搞定Mac上移动硬盘‘被程序占用’的问题

本文介绍了3个终端命令解决Mac上移动硬盘‘被程序占用’的问题,包括使用`diskutil list`定位硬盘、`lsof`查找占用进程以及`diskutil unmount`安全卸载。这些方法能有效避免数据风险,提升操作效率,特别适合开发者和技术爱好者。

weixin_33507732的博客 295

uva 11464 偶数矩阵 (二进制表示法)

题目大意:有一个N*N的01矩阵,你的任务是把尽量少的0变成1,(但不能将1变成0)以使得每个元素的上下左右的元素(若存在)均为偶数。   思路 : 如果暴力枚举每一个位置的话时间复杂度为 2 的255 次方,肯定不行 。但是如果只枚举第一行,其他下面几行都能够通过 上边的来固定是0还是1。时间复杂度就是 2的15次方 加2的n次方; 利用而二进制数来枚举每一种情况 00000 000...

qq_41199502的博客 365

GMSL Strapping Pins CFG0/CFG1 应用

如果 0x13.bit3 = 0, 则是链路没有 Locked,需要去排查下具体问题(通常是工作模式配置问题)如果遇到 Link 无法建立(Locked),电源没有问题的情况下,多半是加串器和解串器的工作模式不匹配。芯片在上电时,会检测这两个管脚的电压,根据不同的电压值,芯片进入到不同的工作模式。一对加串器和解串器,只要工作模式匹配得当,Link Locked,便能够正常工作。ADI 已经充分考虑了用户的需求,尽可能的降低的芯片的使用和配置复杂度。GMSL 的解串器也是类似的配置,具体请参考对应的规格书。

iStoneWalker的博客 1271

【思维】uva11464 Even Parity 偶数矩阵

题目链接 题目描述:对一个n∗n(1<=n<=15)n*n(1<=n<=15)01矩阵,把尽量少的0变成1,使得每个元素四周元素之和为偶数。求最少操作次数。由于通过上一行就能确定下一行,那么只需要枚举第一行的01情况就可以递推出每一行了。 n范围小,可以将第一行的情况压缩为一个int范围的数(状态压缩)。附AC代码。#include <iostream> #include <cstdio> #i

蒟蒻的奋斗史 471

【暂时完结】Prescan学习笔记

Prescan学习记录1. Prescan基础知识1.1 Conventions·坐标1.2 Road segment·道路片段1.2.1 让一个路段连接其他两个路段1.2.2 配置车道线1.2.3 Road marking·道路标志1.3 Trajectory·轨迹1.3.1 建立一个Path·路径1.3.2 配置Speedprofile1.3.3 Synchronization of Trajectories·轨迹同步1.3.4 Multiple trajectories · 多轨迹分配 1. Pres

dreautumn的博客 1万+

AntV G6边动画实战:手把手教你实现数据流向箭头与虚线流动效果

本文详细解析了如何使用AntV G6实现数据流向箭头与虚线流动效果,通过自定义边动画提升数据可视化的动态表现力。从基础环境搭建到核心概念讲解,再到虚线流动动画和箭头路径动画的具体实现与参数调控,帮助开发者掌握G6边动画的高级技巧,适用于网络流量监控、数据传递等场景。

weixin_28487433的博客 268

UVA11464 Even Parity

知识点:递归,递推 和李煜东的那道例题大体思想上一样,指数枚举第一行的时间复杂度是可以接受的,所以枚举第一行,然后由第一行递推得出后面的行,在中间判断存结果就行,需要注意的是,本题只能0变成1,这个不要想当然我一开始做的时候直接默认01可以互换 #include <bits/stdc++.h> #define fi first #define se second #define pb push_back #define mk make_pair #define sz(x) ((int) (x)

qq_33942309的博客 305

ArcGIS基于DEM提取微流域单元(附练习数据下载)

流域作为一个相对独立的地理单元,与行政区的划分有着本质上的区别。流域的划分更注重自然因素,流域作为一个综合的自然整体,在其内部形成了一个天然的物质与能量流动的场所,并通过水流的作用,与周围的区域进行物质和能量的交换。流域的精确划分作为一个研究的基础工作,那么接下来给大家说一下利用DEM提取小流域的案例教程——以贵州省遵义市正安县为例。 1 数据获取 地理空间数据云(http://www.gscloud.cn/),数据分辨率为30m。也可直接点击这篇直接下载→全国30m90mDEM下载。 若想要获得更高精度.

qq_43173805的博客 4835

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

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

weixin_34152820的博客 571

CEH Practical 实战考试真题与答案

CEH Practical 是 EC-Council 推出的Certified Ethical Hacker(CEH)认证项目中的一项高级动手实践考试。它不同于传统的理论考试,侧重于在真实环境中检验考生的实操能力。

sgafdgdagd的博客 969

WinCC实现定时存储数据至SQLServer

环境 Win10 WinCC V7.5 SQL Server 2016 运行结果 流程 WinCC变量 全局VB脚本 (我设置的是每2秒存一次,因此周期性触发器设置1秒)

skr? 3989

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 (

关于完全听不懂神犇在说什么的事 323

Android 64位支持的坑:诡异的文件名问题

最近在尝试发布我的Android应用程序的更新时,遇到了一个令人困惑的64位错误。本文将详细讲解这个问题的产生原因及解决方法,供大家参考。

m0_74337424的博客 124

uva 11464 B - Even Parity 【二进制枚举】

题意:给定一个n*n的矩阵,由0 1组成,每次操作可以将0变成1,问,最少需要多少次操作可以使每个数周围数之和为偶数。思路:枚举第一行可能有的所有情况,再根据每种情况计算出剩下行的排列存入临时数组,每次操作之和就是临时数组和原数组不同的值总和,取所有情况之和中的最小值输出即可。#include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;...

loving coding 249

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

UVA11464-Even Parity

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

qq_43022818的博客 172

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【UVA】11464-Even Parity(二进制枚举子集)

枚举第一行的所有可能情况,之后根据上面行计算下面行(判断是否冲突),获得最终结果。 14058243 11464 Even Parity Accepted C++ 0.275 2014-08-18 05:14:15 #include #include #include #include #include #include

花月阁 855

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

Pengwill's Blog 577

POJ.3279 Fliptile (搜索+二进制枚举+开关问题)

POJ.3279 Fliptile (搜索+二进制枚举+开关问题)题意分析题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置(如果有)的0变成1,1变成0。现在求需要按多少次,才能使得整个map全部变成0。此题解法与 UVA.11464 Even Parity 有异曲同工之妙。首先可以看出,最多每个位置按一次,因为再按的话,相当于

Pengwill's Blog 377

状压DP详解(1)-从状压到状压DP+简单例题玉米田Corn Fields-POJ3254

emmm,首先要搞懂状压DP这个东西的时候我们要搞懂状压这个概念,其实就是二进制运算的概念,比较经典的就是我写的一个状压非DP–的题目Even Parity—Uva11464—偶数矩阵: 这是我对与状压非DP的一个做法https://blog.youkuaiyun.com/qq_43906000/article/details/90798220 当然,在里面应该就可以搞懂状压这个概念了,简单来讲就是暴力枚举,...

孤风的博客 1201

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

UVA 11464 枚举方法

题目链接:UVA 11464 题意:给定一个01矩阵,size:n * n,0可以变成1,1不可以转为0让你求出最小的变化数满足它成为一个偶数矩阵(任一点上下左右(存在)之和为偶数); 题解:这题如果枚举所有01有2^255的复杂度。显然不行, 可以降低枚举层次,只枚举第一层,然后根据偶数矩阵的特征递推,满足条件返回,不满足退出; ps:因为

退役ACMer 700

Even Parity Uva 11464

Even Parity Uva 11464 题意:给出一个n*n的 0、1矩阵,把尽量少的0改成1,使得每个元素的上下左右的元素之和都为偶数。 思路:这道题暴力枚举全部肯定不行,但我们手写模拟下会发现其实枚举第一行就行了,下面都可以根据第一行推出来 #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;algori...

Anger_zjp的博客 325

UVA - 11464 Even Parity 01矩阵——枚举

题意: 给定 01 矩阵,问最少改变几个0成为1,使得每个数四周之和为偶数 思路: 首先想到枚举出所有满足题意的 01 矩阵,然后与原矩阵比较,然而不可实现, 继续想到枚举边上的一行或者一列,就可以由此推出整个矩阵, 然后我们对第一行进行 枚举,,这里选用二进制枚举,比较简便 #include #include #include #include #include #include #

床前明月光 467

uva 11464

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2459 枚举第一行的状态,可以得出任意一行的状态。#include<iostream> #include<cstdio> #include<algorithm> #include<cstrin

qq_31457873的博客 505

uva 11464 Even Parity

https://vjudge.net/problem/UVA-11464 题意: 给出一个0,1矩阵,现在要求把这个矩阵中的某些0改为1,使得这个矩阵中每个格子的上下左右格子(如果存在)的值之和为偶数,问最少的改变次数,不能达到要求输出-1。 思路: 其实,只要第一行的状态定了,接下来所有行的状态就已经定了,这是经过手算得出的结果。根据一个格子的上左右的值之和,就可以确定它下面的格子的状态...

weixin_30780221的博客 98

uva11464

      枚举第一层的所有情况,就是1&lt;&lt;n种情况,将数字转换为二进制数字去枚举;       见代码;    #include&lt;cstdio&gt; #include&lt;iostream&gt; #include&lt;algorithm&gt; #include&lt;cstring&gt; #include&lt;cmath&gt; using namespa...

cy41的博客 340
上一篇: codeforce868c
下一篇: codeforces876B
siyutt
博客等级 码龄15年 3粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值