Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > помогите решить задачу


Автор: BSOD 21.7.2005, 22:20
Методист по информатике О.Г. живет на N-ом этаже 9-этажного дома с лифтом, который может останавливаться на каждом этаже. Между соседними этажами дома имеется лестница из 2-х пролетов, разделенных площадкой, по К ступенек в каждом пролете. Сколькими способами О.Г. может подняться на свой этаж, если поднимаясь по лестнице можно становиться на следующую ступеньку или через одну?

Пимер ввода:
6 14

Пример вывода:
7133524970800529778695960501


Автор: mvdr 23.7.2005, 07:52
типичная комбинаторика.
сначала - думаем:
1) для конкретики берем 4 этаж. тогда N=4; S=(N-1)*2*K // N-1 т.к. чтобы зайти на 2 этаж надо пройти 2 пролета по К ступенек.
считаем способы:
все этажи на лифте
3 на лифте и 1 пешком, супая на каждую
3 на лифте и 1 пешком, чтупая через одну
2 на лифте, 1 пешком на каждую, и 1 на лифте
2 на лифте, 1 пешком через одну, 1 на лифте
2 на лифте. 1 пешком на каждую, 1 пешком через одну
2 на лифте, 1 пешком через одну, 1 пешком на каждую (это все таки по другому, чем в предыдущем случае)
2 на лифте, 2 пешком на каждую
2 на лифте, 2 пешком через одну
..........

.........
все пешком на каждую
все пешком через одну.

Автор: Fixin 23.7.2005, 14:24
Думаю, решение правильное (сам не могу думать - влияние "дум 3"), тут еще сверхдлинные числа нужны, но с единственной операцией "+1".

Автор: mvdr 23.7.2005, 14:31
а на фиг кол-во ступенек? Или подразумевается. что он может идти по ступенкам так: 1112211? (т.е. 1 - на следующую, 2 - через одну)

Автор: Pakshin A. S. 23.7.2005, 21:27
Эх... даная задачка... когда-то на олимпиаде была... лень вспоминать, но думаю поск по нету дас пооложительный результат... Посмотри не трех-четырех сайтах с решениями олимп задач... smile

Автор: BSOD 23.7.2005, 22:28
Femida
Блин, что-то я немного не въехал...

вот у меня есть вариант решения... тока он не работает smile
b[i]:=b[i-1]+b[i-2]+b[i-2*k];
где b[i]- ступенька в массиве, k- кол-во ступенек в пролете
+
проверки, чтобы b[i-x] > 0;
помоему кол-во способов добраться до i-той ступенки = сумме кол-в способов добраться до ступенек, с которых можно добраться до i-той
что не так ? smile

Автор: Akina 24.7.2005, 20:38
Задача распадается на две.

1) Сколькими способами можно подняться по пролету из К ступеней, если можно на каждом шаге ступать либо на следующую, либо через одну ступеньку.

2) Сколькими способами можно подняться на N-й этаж, если на каждый следующий этаж с предыдущего можно подняться либо по лестнице, либо на лифте.

Первое считается рекурсией, второе вообще элементарно... осталось учесть что этаж = 2 пролетам, то что получено в 1 подзадаче, возвесть в квадрат, и учитывать при расчетах в подзадаче 2.

Автор: poor_yorik 25.7.2005, 09:57
Неправильно считаешь лифт.
Вообщем алгоритм такой для i-й ступеньки.
Код

b[0]:=1;
b[1]:=1;
. . .
b[i]:=b[i-1]+b[i-2];
if (i mod 2*k=0) then
 for j:=0 to j div 2*k - 1 do
  b[i]:=b[i]+b[2*k*j];
. . . 


Это в том случае, если можно сесть в лифт на каждом этаже и подниматься на нем только наверх.

Если же лифт можно вызвать только из первого этажа то ответ такой.

Код

b[0]:=1;
b[1]:=1;
. . .
b[i]:=b[i-1]+b[i-2];
if (i mod 2*k=0) then
b[i]:=b[i]+1;
. . . 


smile smile
Добавлено @ 10:02
Только здесь если сесть на лифт на 1-ом этаже, выйти на втором, потом подождать снова сесть в лифт и поехать на пятый, это будет не одно и тоже, что сразу поехать с первого на пятый сразу.
smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)