问题描述
有一个 M * N的矩阵,现在需要使用 1 * 2 的骨牌进行覆盖,问总的覆盖方案数有多少?
题目链接:http://hihocoder.com/contest/hiho43/problem/1
问题求解
标记骨牌覆盖状态
1, 横向排的骨牌表示:
1 1
2, 纵向排的骨牌表示:
0
1骨牌状态转移
对于第 i 行与第 i+1 行,其中某段格子状态如下:转移一
i:0
i+1:1// 如果第 i 行的某个格子为0,那么第 i+1 行对应的一定是1才行。转移二
i:1// 第 i 行的这个格子为1,有两种可能:纵向放置骨牌的下面那个;或是横向放置骨牌的第二个
i+1:0// 不管上面那个格子是如何放置,第i+1行都可以是0,即竖向摆放骨牌的第一个格子。转移三
i:1 1
i+1:1 1// 第 i 行和第 i+1 行都是横向排列
那么由此而来,就有了如下代码了:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#define MAX_K 7
#define STATUS_COUNT (2<<MAX_K)
using namespace std;
struct Matrix {
int matrix[STATUS_COUNT][STATUS_COUNT];
Matrix() {
memset(matrix, 0, sizeof(matrix));
}
};
class Solution {

本文探讨了如何用1*2的骨牌覆盖M*N矩阵的问题,详细解释了骨牌的排列方式及状态转移,并提供了问题的解决方案。通过转移规则分析,得出了解决该问题的代码实现。
270

被折叠的 条评论
为什么被折叠?



