|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 13
|
||||||
Динамическое программирование24.02.2016, 10:21. Показов 4007. Ответов 21
Метки нет (Все метки)
Во время трансляции концерта предприниматель решил сделать бизнес на производстве кассет. Он имеет M кассет с длительностью звучания D каждая и хочет записать на них максимальное число песен. Эти песни (их общее количество N) передаются в порядке 1, 2, …, N и имеют заранее известные ему длительности звучания L1, L2, …, LN. Предприниматель, прослушивая по порядку песни, может выполнять одно из следующих действий:
если песня на текущую кассету помещается, то он может записать ее на кассету или пропустить песню; если песня на кассету не помещается, то он может пропустить песню или начать ее записывать на новую кассету (при этом старая кассета откладывается и туда уже ничего не может быть записано). Необходимо определить максимальное количество песен C, которые предприниматель может записать на кассеты. Входные данные Входные данные содержатся в файле input.txt. В первой строке файла находятся числа N, M и D (все числа натуральные 1 ≤ N ≤ 200, 1 ≤ M ≤ 50, 1 ≤ D ≤ 1000). Во второй строке, находятся натуральные числа L1, L2, …, LN, разделенные пробелом (1 ≤ Li ≤ 1000). Выходные данные Выходные данные находятся в файле output.txt, который в первой строке содержит максимальное количество песен C, которые предприниматель может записать на кассеты. Пример input.txt 3 2 4 1 4 1 output.txt 2 Вроде написал свое решение, но оно работает некорректно. К примеру на тесте: 8 4 6 4 2 4 2 6 6 4 2 (Выдает ответ 4, что является неверным) А на примере : 8 4 6 4 2 4 2 5 5 4 2(тут Выдает уже ответ 7, что является верным) Не могу понять что делаю не так, в случае когда длина песни равна объему кассеты. Вот мой код:
0
|
||||||
| 24.02.2016, 10:21 | |
|
Ответы с готовыми решениями:
21
Алгоритм прямой и обратной прогонки (динамическое программирование) Динамическое программирование Динамическое программирование |
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 13
|
|
| 29.02.2016, 11:15 [ТС] | |
|
помощь все еще нужна
0
|
|
|
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
|
|
| 29.02.2016, 11:32 | |
|
Структура кабздец полный.
8 4 6 4 2 4 2 6 6 4 2 (Выдает ответ 4, что является неверным) Имеем 8 песен. 4 кассеты, на кассете есть 6 минут, так? 4+2 <= 6. Перваякассета. 4+2 <= 6. Вторая кассета. 6 <= 6. Третья кассета. 6 <= 6. Четвёртая кассета. 2 <= 6. Пятая кассета. Итого 5 кассет. Так? А на примере : 8 4 6 4 2 4 2 5 5 4 2 Имеем 8 песен. 4 кассеты, на кассете есть 6 минут, так? 4+2 <= 6. Одна кассета. 4+2 <= 6. Вторая кассета. 5 <= 6. Третья кассета.(Ибо 5+5 больше 6). 5 <= 6. Четвёртая кассета.(Ибо 5+4 больше 6). 4+2 <= 6. Пятая кассета. Итого 5 кассет, так? От куда у вас тогда 7 кассет и это правильно?
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 13
|
|
| 29.02.2016, 12:11 [ТС] | |
|
выдавать нужно наибольшее кол-во песен , которые возможно записать, а не кол-во кассет(оно итак известно).
Добавлено через 3 минуты и на тесте когда 4 2 4 2 6 6 4 2 должно записаться так: 4+2 первая кассета 4+2 вторая кассета 6 третья кассета одну 6-ку пропускаем и 4+2 четвертая кассета
0
|
|
|
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
|
|
| 29.02.2016, 12:13 | |
|
Не понимаю логику, не смогу помочь.
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 13
|
|
| 29.02.2016, 12:13 [ТС] | |
|
и насчет структуры, если вы знаете как это сделать проще я буду только рад если вы поделитесь идеей.
0
|
|
|
Заблокирован
|
||||||||
| 29.02.2016, 17:47 | ||||||||
|
Добавлено через 7 минут Наверно так: когда он пропускает песню, то он к ней уже не возвращается, как и к кассете, когда берет новую, но это не написано в условии. Добавлено через 1 час 4 минуты
0
|
||||||||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 13
|
|
| 29.02.2016, 18:08 [ТС] | |
|
Dsasdf, спасибо, я уже решил эту задачу, правда ваше решение в разы компактнее... не могли бы вы рассказать в чем заключается ваша идея?? в своем алгоритме я разбивал изначальную задачу на 3 подзадачи:
1)Предположим, что длительность звучания последней поступившей песни меньше, чем занятое место на кассете с номером k 2)Длительность последней поступившей песни в точности совпадает с занятым местом на кассете с номером k 3)Длительность последней поступившей песни больше, чем занятое место на кассете с номером k и относительно их уже решал основную задачу. В итоге мое решение получилось достаточно объемным и не проходит 1 тест из-за привышения лимита времени(в задаче лимит 1сек на тесты). Добавлено через 13 минут ваше решение значительно выигрывает по памяти, однако не прошло 8 из 14 тестов на время(тратит на тестах примерно 2 секунды). И на одном из тестов выдало не тот ответ, т.ч. боюсь без трехмерных массивов тут не обойтись.
0
|
|
|
Заблокирован
|
||
| 29.02.2016, 20:43 | ||
|
Добавлено через 1 час 5 минут Ясно. Наврал и сбежал ... ))
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 13
|
|
| 29.02.2016, 20:53 [ТС] | |
|
Dsasdf, я никуда не сбегал, просто отошел)))) на сайт с моими тестами вы не зайдете , но вот вам сайт с этой же задачей, но тестов там поболее и проходит ваш вариант меньше http://www.e-olymp.com/ru/problems/801
Добавлено через 5 минут только когда будете загружать туда решение, обратите внимание что там немного в ином порядке расположены данные во входном файле Добавлено через 2 минуты И насчет вруна. Смысл мне вам врать? я наоборот заинтересован в помощи с правильным решением этой задачи.
0
|
|
|
Заблокирован
|
||
| 29.02.2016, 21:46 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 13
|
|
| 29.02.2016, 22:15 [ТС] | |
|
Dsasdf, Dsasdf, входной файл input.txt , выходной файл otput.txt. Как хранятся данные во входном файле по-моему достаточно понятно там описано. Что хранится во входных данных на сервере не известно, в этом и сложности с поиском ошибки, все делается путём проб и ошибок!
0
|
|
|
Заблокирован
|
||
| 29.02.2016, 22:28 | ||
|
http://www.e-olymp.com/ru/blogs/posts/7 - без этого чуда, программу никогда не запустить на выполнение. Притом пишут main название класса, а в примере приводят Main. Работает все правильно - но время выполнения дольше, чем хотят. Но и автор темы форума в первом посте темы ничего не говорил об ограничениях времени.
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 13
|
||||||
| 29.02.2016, 22:33 [ТС] | ||||||
|
Dsasdf, там написано, чуть ниже условия задания, лимит по времени и по памяти! если вам интересно ,могу скинуть решение этой задачи, но оно не мое и если честно я не особо понимаю как там что сделано, она написана на c++!
Добавлено через 1 минуту может вы поймете что там делается и сможете мне объяснить!
0
|
||||||
|
Заблокирован
|
||
| 29.02.2016, 22:41 | ||
|
Не советую разбирать чужой код - лучше пишите свой.
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 13
|
|
| 29.02.2016, 22:44 [ТС] | |
|
Просто на момент написания темы не возникало проблем со времен, но да, действительно надо бы указать!
0
|
|
|
Заблокирован
|
||||||||
| 02.03.2016, 13:45 | ||||||||
|
Добавлено через 14 часов 2 минуты Задача с сайта - http://www.e-olymp.com Что не так: 1 Условие "задачи" писалось строго под один из численных методов в математике исключая все остальные решения введенными ограничениями. Т.е. если знаешь этот числ. метод - решишь, не знаешь - не решишь. Все сводится на это. А затем выкладывается как "задача для массового решения". 2 В условии умолчали, что "предприниматель" способен прослушать песню только один раз. 3 В рейтинге по потребляемым ресурсам побеждать всегда будет только С и С++, остальные языки несправедливо равняются к ним, потому, что многие языки изначально, ввиду специфики своей работы, потребляют больше, чем вышесказанные - С и С++. Как решается: Раскладываются в ряд все кассеты по минутах. Берется песня и делается вывод можно ли ее записать в одну минуту, две, три и т.д. 1 Составляется таблица значений, где число столбцов равно общему числу минут доступных для записи, а число строк равно числу песен.+1+1 - для удобства 2 Если песню можно записать в выделенное время, то, каждый раз, ищется максимум накрест из соседней вверх ячейки и левой, с добавлением единицы к значению левой ячейки. Позиция левой ячейки считается так: верхняя ячейка минус длинна текущей песни, получается верхняя ячейка сдвинутая влево. Результат записывается в текущую ячейку. 3 Если - нет, ищется максимум из накрест лежащих ячеек, одной влево, другой вверх ячеек, без добавления единицы. 4 Повторяется столько раз, сколько песен в таблице, пока не заполнится вся таблица. Согласно доказательству, результат будет всегда в крайней нижней правой ячейке таблицы, т.е. чтобы получить результат надо вычислить полностью всю таблицу. Вот пример:
0
|
||||||||
|
2739 / 2048 / 507
Регистрация: 17.02.2014
Сообщений: 9,467
|
|
| 02.03.2016, 15:51 | |
|
Переформулируем задачу:
Есть определенное количество отрезков произвольной длинны. Так же, существует определенное количество одномерных "коробок", в которые отрезки могут укладываться, без промежутков, один за другим. Отрезки подаются в произвольном (или определенном, по длине?) порядке. Причем, длинна "коробок" не меньше, самого длинного отрезка. Определить, наибольшее количество "коробок", которые будут заполнены, при данном способе подачи отрезков? Все верно?
0
|
|
|
Заблокирован
|
|||
| 02.03.2016, 17:07 | |||
Если бы порядок был не важен, т.е. можно было возвращаться снова к пропущенному отрезку, - то решением задачи была бы группировка по возрастанию, с выбором сначала всех меньших отрезков, затем больших. Удачи.
0
|
|||
|
2739 / 2048 / 507
Регистрация: 17.02.2014
Сообщений: 9,467
|
|||
| 02.03.2016, 18:19 | |||
|
3 2 4 - порядок и длина отрезков? 1 4 1 - вместимость коробок? Что без возврата, это понятно ![]() Я понял так: |3|2|2|4| - это отрезки определенных длин идущих слева на право. Коробки вместимостью 4 длинны стоят на выходе. Первая коробка заполнится полностью, вторая тоже, но двумя отрезками, третья будет иметь пустое место в одну длину.
0
|
|||
| 02.03.2016, 18:19 | |
|
Помогаю со студенческими работами здесь
20
Динамическое программирование
Динамическое программирование
ДП Динамическое программирование Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|