轮廓线入门题目
- 题目大意:
给定一个n*m的矩阵,用1*2的矩形填充,求有多少种情况(n*m<=100)
int n, m, cur, all;
LL dp[2][1 << 11];
void update(int a, int b)
{
if (b & all) dp[cur][b ^ all] += dp[1 - cur][a];
}
int main()
{
// freopen("in.txt", "r", stdin);
while (~RII(n, m))
{
if (n < m) swap(n, m);
all = 1 << m; cur = 0;
CLR(dp, 0);
dp[cur][all - 1] = 1;
REP(i, n)
{
REP(j, m)
{
cur ^= 1;
CLR(dp[cur], 0);
REP(k, all)
{
update(k, k << 1);
if (i && !(k & (1 << (m - 1)))) update(k, (k << 1) + all + 1);
if (j && !(k & 1)) update(k, (k << 1) + 3);
}
}
}
cout << dp[cur][all - 1] << endl;
}
return 0;
}