uva11464
来源:互联网 发布:淘宝二手下肢康复器 编辑:程序博客网 时间:2024/06/07 05:03
题目大意:
给出一个矩阵,说明使用最少的改变(把0变成1)使得矩阵中的每一个数的前后左右加起来都是偶数。
思路:
枚举第一行,推出第二行第三行。。。
代码:
#include <iostream>using namespace std;#include <stdio.h>#include <cstring>#define INF 10000000int grid[20][20];int temp[20][20];int N;int check(int k) { memset(temp,0,sizeof(temp)); int su = 0; for(int i = 0 ; i < N; i++){ if(k & (1 << i)) temp[0][N-i-1] = 1;//这里写i或者N-i-1都是可以的,因为逆置和没有逆置是无所谓的反正都会被枚举到 else if(grid[0][N-i-1] == 1) return INF; } for(int i = 1; i < N; i++) { for(int j = 0; j < N; j++) { su = 0; if(i > 1) su += temp[i - 2][j]; if(j > 0) su += temp[i - 1][j - 1]; if(j < N - 1) su += temp[i - 1][j + 1]; temp[i][j] = su % 2; if(grid[i][j] == 1 && temp[i][j] == 0) return INF; } } int cnt = 0; for(int i = 0 ; i <N; i++) for(int j = 0 ; j < N; j++) { if(temp[i][j] != grid[i][j]) cnt++; } return cnt;}int main() { int T,cases = 1; scanf("%d",&T); while(T--){ scanf("%d",&N); for(int i = 0; i < N ; i++) { for(int j = 0; j < N; j++) { scanf("%d",&grid[i][j]); } } int ans = INF; for(int i = 0 ; i < (1 << N); i++) { ans = min(ans,check(i)); } printf("Case %d: ",cases++); if(ans == INF) printf("-1\n"); else printf("%d\n",ans); } return 0;}
0 0
- UVa11464
- uva11464
- UVa11464
- UVA11464
- uva11464
- Uva11464 - Even Parity
- uva11464 - Even Parity
- UVA11464 Even Parity
- UVA11464偶数矩阵
- uva11464(状态压缩)
- UVA11464 Even Parity
- Uva11464 - Even Parity
- uva11464 - Age Sort
- uva11464 Even Parity
- UVa11464-Even Parity
- UVA11464 BNU19882 Even Parity
- uva11464 Even Parity
- uva11464(递推)
- Simulink学习笔记4--Simulink动态系统建模
- JavaScript学习笔记(四):JS浏览器BOM
- Java父类构造函数调用注意,父类构造函数抛出异常注意
- 英特尔推出第六代智能酷睿博锐处理器产品家族
- MNIST数据集的gist特征提取(含全部实例代码下载地址)
- uva11464
- Tomcat的https配置及双接口配置
- linux下I2C驱动分析2-(1)
- 判断字符串是否为纯数字
- Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持
- 每天学习一点点:如何转到其他界面;
- 欢迎使用CSDN-markdown编辑器
- JAVA DES加密解密
- MFC对话框退出程序所调用的函数