给定4乘4的01矩阵,反转成全0或者全1。求最小的反转次数。
http://poj.org/problem?id=1753
解法一:进行两次二维反转,一次算出反转成全0的最少反转次数,一次算出反转成全1的最少反转次数。
详细方法:http://blog.csdn.net/fad_further/article/details/20571099
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int inf = 0x3f3f3f3f;
const int dxy[5][2] = {
{0, 0}, {1, 0}, {0, 1}, {-1, 0}, {0, -1} };
int a[5][5], opt[5][5], ans, res;
char str[10];
bool judge(int x, int y){
int ret = a[x][y];
for(int i=0; i<5; i++){
int xx = x + dxy[i][0];
int yy = y + dxy[i][1];
if(xx >= 0 && xx < 4 && yy >= 0 && yy < 4)
ret += opt[xx][yy];
}
return ret % 2 == 0;
}
void cal(){
for(int i=1; i<4; i++)
for(int j=0; j<4; j++)
if(!judge(i - 1, j)){
opt[i][j] = 1;
ans++;
}
}
void cal2(){
for(int i=1; i<4; i++)
for(int j=