Доброго времени суток. Бьюсь уже какую неделю над задачей, просто уснуть не дает. Все никак не могу прийти к алгоритму который валидатор сумеет проверить.
Итак что конкретно происходит:
Беру первоначальный список, и удаляю из него все рекламы, которые превышают общее время заказа по времени, и с нулевым hits. Отдаю в функцию полученый лист.
Функция(setBestList):
Проверяем есть ли у нас уже какая-нибудь определенная комбинация:
Если нет:
Проверяем что общее время реклам < общего времени готовки.
Если да - запоминаем как лучшую комбинацию. Запоминаем ее параметры(Время прокрутки, цены, кол-во реклам в блоке)
Если нет - Для каждого элемента листа вызываем setBestList, передавая в него тот же лист, но с удаленным текущим элементом.
Если есть уже определенный "лучший набор":
Проверяем что текущий лист лучше чем "лучший набор"(по условию, сверяем стоимость рекламы>время прокрутки>количество реклам в блоке). Если текущий лист лучше "лучшего листа" то проверяем пройдет ли по времени заказа. Если да => переопределяем "лучший набор" Запоминаем его параметры. Если нет => опять начинаем рекусивно крутить удаляя по элементу и вызывая эту же функцию.
Полученый результат сортирую выдачу по условию.
На домашней машине все работает мгновенно на ростер из 10+ реклам с нарандомлеными параметрами.
Я не знаю сколько они там кидают в джавараше нагруз, но я официально сдаюсь. Сижу над этой задачей уже месяц. Я уже не знаю куда алгоритм оптимизировать.
package com.javarush.task.task27.task2712;
import com.javarush.task.task27.task2712.ad.AdvertisementManager;
import com.javarush.task.task27.task2712.kitchen.Cook;
import com.javarush.task.task27.task2712.kitchen.Dish;
import com.javarush.task.task27.task2712.kitchen.Order;
import com.javarush.task.task27.task2712.kitchen.Waiter;
import java.io.IOException;
import java.util.List;
public class Restaurant {
public static void main(String[] args) throws IOException {
Cook cook = new Cook("TestCook");
Tablet tablet1 = new Tablet(1);
tablet1.addObserver(cook);
Waiter waiter = new Waiter();
cook.addObserver(waiter);
tablet1.createOrder();
}
}