Помогите, пожалуйста! Есть задача:
"Дана таблица MxN. Нужно посчитать количество замощений таблицы доминошками 1*2."
Очевидно, должен быть рекурсивный алгоритм, типа посчитать количество замощений для очередного профиля, но я что-то никак не могу дотумкать.
Препод скинул примерный код на C++:
Code
int n, m;
vector < vector<long long> > d;
void calc (int x = 0, int y = 0, int mask = 0, int next_mask = 0)
{
if (x == n)
return;
if (y >= m)
d[x+1][next_mask] += d[x][mask];
else
{
int my_mask = 1 << y;
if (mask & my_mask)
calc (x, y+1, mask, next_mask);
else
{
calc (x, y+1, mask, next_mask | my_mask);
if (y+1 < m && ! (mask & my_mask) && ! (mask & (my_mask << 1)))
calc (x, y+2, mask, next_mask);
}
}
}
int main()
{
cin >> n >> m;
d.resize (n+1, vector<long long> (1<<m));
d[0][0] = 1;
for (int x=0; x<n; ++x)
for (int mask=0; mask<(1<<m); ++mask)
calc (x, 0, mask, 0);
cout << d[n][0];
}
Но я с C++ не очень, не могу на Паскаль перевести. Помогите, пожалуйста!
P.S. Алгоритм также описан здесь http://informatics.mccme.ru/books/sbory.pdf (на 102-й странице)
Добавлено (28.12.2010, 04:46)
---------------------------------------------
Помогите, пожалуйста! Задача то вроде должна получиться коротенькая, на рекурсию, но я ну никак не могу с этими профилями и битами догнать!!!