#1919. 珅泽教育CSP-J第一轮模拟考第十一套 第 43 题
珅泽教育CSP-J第一轮模拟考第十一套 第 43 题
第2题
给定一个网格,该网格由 个方格组成,每个方格内有一个正整数,其中第 行第 列的整数为 。我们可以使用任意多块 的骨牌覆盖网格上的数字,每块骨牌不得重叠,也不能越过网格的边界。被骨牌覆盖的数字就消失了。请问应该如何摆放骨牌,使得没有消失的数字的异或之和达到最大。所谓异或,就是 C++ 的 ^ 操作。注意不覆盖任何骨牌也是一种选择。
#include<iostream>
int a[20][20];
bool covered[20][20];
int n, m;
int solve(int x, int y, int sum)
{
if (y == m) {
return ____②____;
}
if (____③____) {
return sum;
}
int D = 0;
if ( covered[x][y] )
D = solve(x, y+1, sum);
else
D = ____④____;
int V = 0;
int H = 0;
if (!covered[x][y] && y+1 < m && !covered[x][y+1])
{
covered[x][y] = covered[x][y+1] = true;
V = ____⑤____;
covered[x][y] = covered[x][y+1] = false;
}
if (!covered[x][y] && x+1 < n)
{
covered[x][y] = covered[x+1][y] = true;
H = ____⑥____;
covered[x][y] = covered[x+1][y] = false;
}
return std::max(D, std::max(H, V));
}
int main(){
std::cin >> n >> m;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
std::cin >> a[i][j];
}
}
std::cout << ____①____ << "\n";
}
④ 处应填( )。
{{ select(1) }}
solve(x, y+1, sum ^ a[x][y])solve(x+1, y, sum ^ a[x][y])solve(x, y+1, a[x][y])solve(x+1, y, sum)