Задача решается методом динамического программирования.

Для этого обозначим через A(n) – количество способов замостить коридор длиной n. Так как для коридора длиной k<m плитки можно укладывать только горизонтально, то A(k)=1. В других случаях плитки в последнем ряду можно положить или горизонтально, или вертикально, а тогда n-оe решение можно получить суммой предыдущих A(n)=A(n-1) + A(n-m). Приведенные соотношения позволяют последовательно рассчитать требуемое количество замощений коридора. Ответом будет значение A(N).

Также необходимо учесть, что количество получаемых вариантов может иметь число с порядком 10, для этого необходимы правильные типы данных.

 

Язык программирования Pascal

program plitka;

var m, n, i: integer;
a : array [0..50] of int64;
begin
readln(m,n);
for i:=0 to m-1 do a[i]:=1;
for i:=m to n do
a[i]:=a[i-1]+a[i-m];
write(a[n]);
end.