题目大意:给你一个n*n的01矩阵,你的任务时把尽量少的0变成1,使得每个数字的上下左右之和为偶数。只算存在的
解题思路:全部枚举时不可能的,枚举第一行的变化,那么第二行行就可以递推出来。(因为第一行上面一行不存在,所以是三个的和)。 那么第三行就可以根据第一行和第二行推出。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <queue>
#include <map>
#include <stack>
#include <vector>
#include <string>
#define mem(s) memset(s, 0, sizeof(s))
using namespace std;
int A[16][16];
int Cur[16][16];
int n;
const int INF = 1 << 31 -1;
int solve(int x)
{
mem(Cur);
for(int i =0; i<n; i++)
if(x & (1 << i)) Cur[0][i] = 1;
else if(A[0][i] == 1) return INF; //1不能变成0
for(int i = 1; i< n; i+&#