Я столкнулся с проблемой, когда мне нужно заполнить прямоугольник, имеющий 2 строки и n столбцов. Есть две плитки: одна плитка 1 * 2, а вторая плитка L-образной формы с большими сторонами, имеющими размерность 2 единицы, и меньшими сторонами, имеющими размерность 1 единицу.
Я решил это с помощью динамического программирования и не совсем уверен, работает ли он нормально или нет. Если нет, то какой будет правильный восходящий код этой проблемы. Ниже приведен фрагмент функции моего решения.
Для повторения один столбец можно заполнить одним способом, положив первый тайл вертикально, два соседних столбца можно заполнить одним способом, положив первый тип тайла горизонтально один за другим. Три соседних столбца можно заполнить, выровняв две L-образные в перевернутом виде двумя способами, а четыре соседних столбца можно заполнить двумя L-образными плитками, обращенными друг к другу, и плиткой первого типа, лежащей горизонтально, двумя способами.
int tileways(int n) //n=no.of columns of the rectangle.
{
int i;
int a[n+4];
a[0]=0;
a[1]=0;
a[2]=0;
a[3]=1;
for(i=4;i<n+4;i++)
{
a[i]=a[i-1]+a[i-2]+2*a[i-3]+2*a[i-4];
}
return a[n+3];
}
std::vector
. - person tadman   schedule 30.01.2021