|
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
|
|
Правильное и эффективное решение задачи на дп31.03.2015, 21:39. Показов 2129. Ответов 6
Метки нет (Все метки)
Здравствуйте. Подскажите, пожалуйста, как решить данную задачу на динамическое программирование:
"Эффективный менеджер планирует построить несколько новых ресторанов вдоль шоссе. Есть n возможных мест, где можно построить ресторан, на расстояниях m1 < m2 <*< mn от начала шоссе. При этом: 1) В каждом из имеющихся n мест можно открыть не более одного ресторана; 2) Для каждого места i in [1,n] известна прибыль pi >0 от открытого там ресторана. 3) Любые два ресторана должны находиться на расстоянии не менее k километров, где k -положительное целое число. Постройте эффективный алгоритм для расчёта максимальной общей прибыли при заданных условиях." Пока всё, что пришло в голову: S(j) - макс. прибыль от постройки отелей на отрезке [1,j], S(1) = p1, S(j) = Smax(j) + pj, где Smax(j) = макс. по i = 1,...,j-1 таких, что mj - mi >=k (если таких i нет, то Smax = 0), Ответ - S(n);
0
|
|
| 31.03.2015, 21:39 | |
|
Ответы с готовыми решениями:
6
Правильное ли решение задачи? Правильное ли решение задачи?
|
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
|
||||||
| 01.04.2015, 02:35 | ||||||
|
За линейное время.
Мне удобнее с конца строить решения. s[j] = прибыль с m[j] и до конца
1
|
||||||
|
194 / 174 / 30
Регистрация: 10.07.2012
Сообщений: 800
|
|
| 01.04.2015, 12:29 | |
Сообщение было отмечено PG94 как решение
Решение
PG94, все хорошо, только надо еще для каждого
это решение работает за нужно заметить, что если рассматривать рестораны в порядке возрастания их координаты, то все допустимые рестораны (т.е те, которые находятся на расстоянии не меньше такое решение работает за
2
|
|
|
221 / 166 / 47
Регистрация: 17.07.2012
Сообщений: 587
|
|
| 01.04.2015, 13:12 | |
|
salam, вместо бинпоиска можно делать 2 указателя.
2
|
|
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
|
||||||||||||
| 01.04.2015, 17:46 | ||||||||||||
|
А в среднем случае линейный поиск будет не хуже, чем второй указатель или бинарный. з.ы. Это если я правильно понял Вашу мысль про второй указатель. Добавлено через 2 минуты Правда, всего второй указатель пробежит не больше N... тогда, выходит, поможет. Я запутался. ![]() Добавлено через 17 минут salam, Поясните, пожалуйста, как Вы получаете такие оценки? (Какое решение работает за Добавлено через 29 минут Кажется, разобрался. Спасибо. Добавлено через 11 минут Теперь за линейное время не только в среднем, но и в худшем случае.
Добавлено через 1 час 25 минут Избавился от одного сравнения внутри цикла. Так как сравнение хорошо предсказуемое, особого ускорения это не даёт, но код выглядит проще.
0
|
||||||||||||
|
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
|
|
| 01.04.2015, 20:38 [ТС] | |
|
Спасибо. Думаю, что следующего исправления достаточно:
S(j) = max{S(j - 1), Smax(j) + pj}, где Smax(j) = max{S(i), i = 1,...,j-1 и mj - mi >=k}, если сущ. хотя бы одно такое i, иначе Smax(j) = 0. Напишите, пожалуйста, если и в этот раз решение не полное.
0
|
|
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,878
|
||
| 01.04.2015, 21:05 | ||
|
С учётом того, что S(j) неубывающая функция, то вместо Smax = max{S(i), i = 1,...,j-1 и mj - mi >=k} можно использовать S(maxi) = S(max{i, i = 1,...,j-1 и mj - mi >=k}). И, как предложил SlavaSSU, можно использовать отдельные указатели для j и maxi. На каждом шаге увеличиваем j на 1, а maxi увеличиваем, пока не нарушается условие mj - mi >=k. (как в вариантах CalculateProfit2 и CalculateProfit3)
1
|
||
| 01.04.2015, 21:05 | |
|
Помогаю со студенческими работами здесь
7
Правильное ли решение задачи? Лафоре. 3 глава 9 задача Подскажите эффективное решение
Какое эффективное решение , чтоб нужный код выполнялся раз в определенное время? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|