Существует сетка n x 1. Вы должны покрасить ее по крайней мере красные клетки, по крайней мере, зеленые клетки, по крайней мере, в синие клетки. (n + r + g < = n). Говорят, что два шаблона отличаются друг от друга, если они отличаются друг от друга по крайней мере одной позицией. Каким образом вы можете его раскрасить. (Решение может быть как алгоритмическим, так и математическим).Количество способов окрашивания сетки
Моя попытка:
enter code here
int func(int id, int r, int g, int b)
{
int ma = 0;
if (id == n) {
if (r > 0)
ma++;
if (g > 0)
ma++;
if (b > 0)
ma++;
return ma;
}
if (r > 0)
ma += func(r-1, g, b, id + 1);
if (g > 0)
ma += func(r, g-1, b, id + 1);
if (b > 0)
ma += func(r, g, b-1, id + 1);
if (r + g + b < n - id) {
ma += func(r, g, b, id + 1);
}
return ma;
}
Кроме того, какова приемлемая сложность времени и пространства для алгоритма? –