![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Участник клуба
Регистрация: 15.05.2009
Сообщений: 1,222
|
![]()
Добрый день! Есть задача про мост и фонарь. Вот например: В спешке не пропустить начало нового сериала, семья ночью подошла к мосту. Папа может перейти его за 1 минуту, мама — за 2, сынишка — за 5, а бабушка — за 10 минут. У них есть один фонарик, а мост выдерживает только двоих. За сколько минут все они смогут его перейти при лучшей организации своего движения?
Условия для особо придирчивых: Если переходят двое, то они идут с меньшей из скоростей. Идти по мосту без фонарика нельзя. Светить издали нельзя. Носить друг друга на руках нельзя. Бросать фонарик нельзя. Как дейтсвовать в этом конкретном примере понятно, но мне нужна стратегия для всех возможных случаев. Кто-нибудь может словами описать стратегию поведения если количество человек произвольное?
Единственное, что ограничивает полет мысли программиста-компилятор
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
А мне кажется, что алгоритм очевиден: фонарик должен носить самый быстрый. Порядок остальных неважен.
Кстати, длительность перехода очевидно вычисляется по формуле. Пусть N - количество членов семьи (при этом N>1), и T1 T2 .. Tn - длительность перехода каждого члена семьи, при этом минимальное время обозначим через Tmin тогда Код:
|
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 15.05.2009
Сообщений: 1,222
|
![]()
эм пробовала так. Но если данные такие 1 2 10 10 15 то будет правильнее медленных вести вместе.
Единственное, что ограничивает полет мысли программиста-компилятор
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
по моему алгоритму, фонарик носит обратно тот у кого время прохождения минимально, в данном случае — одна минута. Общее время прохождения 2 + 10 + 10 + 15 + 3*1 = 40 минут. |
|
![]() |
![]() |
![]() |
#5 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]()
Слышал о таких задачах и давным давно убедился, что предлагаемый выше способ не является оптимальным. Есть способ круче. Вот только лично я его не помню.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 15.05.2009
Сообщений: 1,222
|
![]()
правильнее будет увести сначала 1,2. 1 возвращается передет фонарь и идут 10 и 15
затем 2 возвращается и идут 1 и 10 затем 1 возвращается берет 2 и идет и выходит 31 может быть кто-нибудь помнит?
Единственное, что ограничивает полет мысли программиста-компилятор
Последний раз редактировалось Stilet; 06.09.2010 в 10:01. |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
![]()
http://archive.ite.journal.informs.o...rimbergHurley/
Если просто нужен алгоритм - п.4. Если нужно разобраться - пп.3-4. Если нужно глубоко покопать, тогда - книги по динамическому программированию и принципу Беллмана в частности. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
![]()
Могу забрутфорсить все варианты и написать какой будет оптимальный по времени )))
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
![]() |
![]() |
![]() |
#9 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Ого. Признаю. Был неправ.
Цитата:
идут 1 и 2 = 2 мин 1 возвращается = 1 мин 10 и 15 идут = 15 минут 2 возвращается = 2 мин идут 1 и 2 = 2 мин 1 возвращается = 1 мин 1 и 10 идут = 10 минут итого: 33 минуты Vago, снимаю шляпу. Спасибо за науку! не поленюсь запостить перевод финального алгоритма из пункта 4 (взятый по ссылке выше): Цитата:
|
||
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
![]()
Самое смешное, что чуть ниже в этом самом п.4 приведен пример, когда этот алгоритм оптимального решения не даёт!
![]() |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как работает мост между подключениями в Windows? | jojahti | Свободное общение | 2 | 28.09.2009 14:15 |
AMD. Северный мост. Охлаждение ПК. | Web-Gangsta | Компьютерное железо | 17 | 28.07.2009 15:26 |
Задача про лифт | Askar_g | Общие вопросы C/C++ | 3 | 05.02.2009 13:01 |
Задача про функцию | dez2007 | Помощь студентам | 2 | 03.02.2009 18:46 |
Задача про 3 прямые | meds | Паскаль, Turbo Pascal, PascalABC.NET | 5 | 17.11.2008 12:24 |