分析:根据题目要求可知:全局正面朝上=所有的局部正面朝上。这也意味着贪心+递归是解题核心思路,即所有局部正面朝上构成了整体正面朝上。
#include<iostream>
#include<stdio.h>
using namespace std;
bool a[1000][1000];
int N, M;
int num = 0;
void f(int x)
{
if (x + M > N)
{
for (int i = x; i < N; i++)
for (int j = 0; j < N; j++)
{
if (a[i][j] == 0)
{
num = -1;
return;
}
}
return;
}
for (int i = 0; i < N; i++)
{
if (a[x][i] == 1)
continue;
else
{
if (i + M > N)
{
num = -1;
return;
}
num++;
for (int g = x; g < x + M; g++)
for (int j = i; j < i + M; j++)
a[g][j] = !a[g][j];
}
}
f(x + 1);
}
int main()
{
cin >> N >> M;
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cin>>a[i][j];
f(0);
cout << num;
return 0;
}