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