uva 11464 - Even Parity (枚举+递推)
来源:互联网 发布:51信用卡工作 知乎 编辑:程序博客网 时间:2024/05/16 09:53
题目链接:11464 - Even Parity
题意:
给你一个0、1矩阵,让你将其中的一些0变成1,使得每个位置的周围都是偶数个1.求最少将几个0变成1.
思路:
分析得出上两行确定之后,下一行为0或者1是确定的,要确定一个点为x,则看其上面的点周围的三个方向已经有y个1,则x+y=偶数,那么就能得出x为0或者1了。枚举第一行的状态之后依次递推下一行即可。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <string>#include <map>#include <stack>#include <vector>#include <set>#include <queue>#pragma comment (linker,"/STACK:102400000,102400000")#define maxn 1005#define MAXN 50005#define mod 1000000009#define INF 0x3f3f3f3f#define pi acos(-1.0)#define eps 1e-6typedef long long ll;using namespace std;int n,m,ans,cnt,tot,flag;int mp[20],s[20];void solve(){ int i,j,t,num,col,row,x,y; ans=INF; tot=(1<<n)-1; for(i=0;i<=tot;i++) { if(!((i&mp[0])==mp[0])) continue ; flag=1; // printf("--------i:%d\n",i); memset(s,0,sizeof(s)); s[0]=i; num=0; for(j=0;j<n;j++) { if(!(mp[0]&(1<<j))&&(i&(1<<j))) num++; } for(row=1;row<n&&flag;row++) { for(col=0;col<n&&flag;col++) { x=0; if(col!=0) { if(s[row-1]&(1<<col-1)) x++; } if(col!=n-1) { if(s[row-1]&(1<<col+1)) x++; } if(row-2>=0) { if(s[row-2]&(1<<col)) x++; } if(x&1) // 1 { s[row]|=(1<<col); if(mp[row]&(1<<col)) ; else { num++; } } else // 0 { if(mp[row]&(1<<col)) flag=0; } } } if(flag) ans=min(ans,num); }}int main(){ int i,j,t,test=0; scanf("%d",&t); while(t--) { scanf("%d",&n); int x; memset(mp,0,sizeof(mp)); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",&x); if(x) mp[i]|=(1<<j); } } solve(); if(ans==INF) ans=-1; printf("Case %d: %d\n",++test,ans); } return 0;}
0 0
- UVA - 11464 Even Parity 枚举+递推
- uva - 11464 - Even Parity(部分枚举,递推)
- uva 11464 - Even Parity (枚举+递推)
- UVA 11464 Even Parity(枚举递推)
- uva 11464 Even Parity 递推
- uva 11464 - Even Parity(暴力枚举)
- UVA 11464 - Even Parity(枚举方法)
- UVa 11464 Even Parity(枚举)
- uva 11464 - Even Parity(暴力枚举)
- UVA - 11464 Even Parity 枚举
- UVA 11464 Even Parity(枚举)
- 【UVA】11464-Even Parity(二进制枚举子集)
- UVA 11464 - Even Parity(枚举方法)
- UVa 11464 Even Parity (部分枚举)
- uva 11464 Even Parity 模拟 二进制枚举
- UVA 11464 Even Parity(暴力枚举)
- UVA 11464 - Even Parity
- uva 11464 - Even Parity
- navicat软件设置连接mysql数据库
- dhtmlxTree介绍
- linux 内核学习之系统调用
- socket 通信机制
- 苹果iWatch确实存在 或于第四季度发布
- uva 11464 - Even Parity (枚举+递推)
- GDB指定和修改搜素源码文件的路径(set substitute-path)
- 警惕C++中整数除法计算的精度损失
- linux下的Boost.Regex的编译和使用方法
- 从B树、B+树、B*树谈到R 树
- Android 简单2D绘图
- OCP 1Z0 052 107
- 使用TortoiseGit时如何实现SSH免密码登录
- Android中图片占用内存的计算