棋盘覆盖2(1X2骨牌 和 L型骨牌 混合铺满)(强行轮廓线DP)

该博客探讨了如何使用1*2和L型骨牌来填充n*m棋盘的所有可能方式。由于引入了L型骨牌,处理棋盘边缘的填充变得更为复杂,特别是要考虑左上方的填充状态。状态转移矩阵增加了额外的一位,以表示左上方、上方和左侧的填充情况。在转移过程中,上方有空格时可以选择填充,但如果当前格子位于行尾,上方则必须填充;左上方的空格则必须填充。
摘要由CSDN通过智能技术生成

NYOJ435【题意】用1*2或者L型的地板铺满n*m的地面一共有多少中方案


因为多了L型骨牌,轮廓线需要判断左上方的填充情况,所以轮廓线的状态要加一位,最高位表示左上方,次高位表示上方,最低位表示左方。

状态的转移也复杂些,之前是上方有空就必填,否则没机会填了,现在因为可以填充到左上方的格子,所以上方有空也可以考虑不填,但是当当前位置是每排的最后一个时上方的格子不填就没机会 填了,所以这里要做个特判。然后左上方为空是必填的。


#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

#define LL long long int

inline int read()
{
	char ch;
	int ans;
	ch = getchar();
	if (ch == -1)
		return -1;
	while (ch < '0' || ch > '9')
		ch = getchar();
	ans = ch - '0';
	while ((ch = getchar()) >= '0' && ch <= '9')
	{
		ans = ans * 10 + ch - '0';
	}
	return a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值