Ресторан(10)

  • 15
  • Недоступна
Рекурсию используют тогда, когда алгоритм решения задачи совпадает с алгоритмом решения подзадачи (части). У нас как раз такой случай. Нам нужно сделать полный перебор всех вариантов и выбрать из них лучший. Напомню, рекурсия пишется по следующему принципу: а) условие выхода/окончания рекурсии б) у
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (110)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Victoria Sedletskaya32 уровень, Одесса
17 января, 13:12
1817 человек 2 дня.. в Advertisement в toString выводила начальную стоимость вместо amountPerOneDisplaying за это время переписала создание списка тремя способами, внедрила все ваши советы из этого обсуждения, пробовала функцию создания списка со stakeoverflow, прочла про динамическое программирование, но решила еще последний раз вернуться к первоначальному решению (рюкзак) и походу заметила вывод initialAmount/100 (типа не в копейках, поэтому с выводом условия совпадало)
Gogogo30 уровень
17 января, 11:35
Для себя: написал код, протестировал, чему-то научился. Для валидатора: копипаст с Гитхаба.
Павел Афанасьев33 уровень, Москва
11 декабря 2018, 22:36
Нужно чистить storage с помощью getHits! Однако!
7 декабря 2018, 22:22
Правильно сделали, что заглянули в комменты, надеюсь поможет: 1. Рекурсия нах не нужна. 2. Только сортировка storage.list() (по getAmountPerOneDisplaying() и по getDuration() этого хватило), можете лямбами пользоваться, так даже эстетичнее выглядит ) 3. В цикле на показ из storage.list() можно удалять элементы, можно и просто пропускать. 4. ВАЖНО: Вывод нужно делать как написано в 9 (девятом) ЗАДАНИИ!!! Все проблемы только от этого и словите!!! Пример для заказа [Water]: First Video is displaying... 50, 277 где First Video - название рекламного ролика где 50 - стоимость показа одного рекламного ролика в копейках где 277 - стоимость показа одной секунды рекламного ролика в тысячных частях копейки (равно 0.277 коп) Все. Делаете так - переходите пункту 11. Спасибо за внимание, всем удачи!
fanar630 уровень, Москва
16 января, 07:56
Спасибо тебе, мил человек!!! с 21 попытки, а реально с 3 (после прочтения) и то, потому что "," пропустил. P.S. Ребят, внимательнее с форматом вывода - если формат вывода не соответствует заданию, то фейлятся все пункты!!!
Михаил Голубцов41 уровень, Санкт-Петербург
19 ноября 2018, 10:22
У меня не проходило по пункту "В набор должны отбираться только ролики с положительным числом показов." при том, что я отбирал только с положительным, помогло в конструкторе Advertisement сделать проверку что hits не ноль. Ну как так?
amountPerOneDisplaying = hits == 0 ? 0 : initialAmount / hits;
--------------------------------- Вы решили задачу лучше, чем 37% учеников. Вам удалось ее решить с 8 попытки. Среднее количество попыток для этой задачи 10.07. Всего эту задачу решили 1738 учеников. 19 Ноября 2018
8 ноября 2018, 01:34
Я ее таки решил ... Это было долго, даже не так ДОООЛГО скорее, всем кому хочется решить "рюкзак" aka "ранец" в помощь. От себя скажу что некоторые условия типа длинны списка показа при прочем равном и количество роликов в показе пришлось дописать в условие выбора лучшего списка. Научился решать "рюкзак" раньше не умел
25 ноября 2018, 10:51
А можно решение, чего то я никак не сдвинусь, хоть разберу внимательно.
26 ноября 2018, 01:33
я дальше в этом биге застрял... так что возможно мое решение не очень
Вечный Воитель31 уровень, Москва
7 ноября 2018, 20:27
Господа, что я сделал не так, почему таймаут, прошу помощи ппц как. Это уже дело чести для меня понять где я накосячил в алгоритме: https://javarush.ru/help/12091
Vlad S41 уровень
31 октября 2018, 07:42
Вроде бы как самое лаконичное решение, умещается в 13 строк, без рекурсии (валидатор ее не требует, да и объективно она тут только усложняет все) и точно не требует правки до конца задачи: 1) отбираем рекламу с ненулевым количеством показов в отдельный список; 2) сортируем (я делал в одну строку с помощью list.sort(Comparator.comparingLong(...).thenComparingInt(...))) и переворачиваем список; 3) в цикле добавляем подходящие по длительности ролики из этого списка в новый, каждый раз отнимая длительность ролика от выделенного времени и проверяя что оно осталось; 4) выводим получившийся список в консоль. Создавать новый список в пункте 3 в этой задаче в принципе не нужно, можно сразу выводить, но потом все равно понадобится отдельный список.
Евгений Скид32 уровень
22 октября 2018, 20:07
Скиньте рабочий вариант класса с решением рекурсией. Чувствую, что еще долго могу здесь просидеть. Только не самоделку, а по алгоритму заполнения рюкзака. Спасибо
Ilya Sakharov41 уровень, Москва
9 октября 2018, 01:33
Сделал со второй попытки. Для тех, кто будет страдать, добавлю свои 5 копеек. Завис над правильной сортировкой, что в условии описано очень не явно. Итак, должно быть две сортировки: среди всех возможных комбинаций, которые можно показывать, нужно выполнить сортировку по условиям, как описано в п.п. 1, 4, 4.1, 4.2. Отсортировать и взять наилучшую комбинацию (первую в списке). Внутри полученной комбинации нужно тоже сделать сортировку, но по другим условиям! Условия сортировки описаны в (!!!) предыдущей задаче (9), см. п. 2.4. Не знаю как остальные догадались, для меня это было далеко не очевидно..