У меня проблема с одним алгоритмом.
Здесь указаны n ящиков, каждый из которых имеет фиксированный вес и прочность (оба указаны в кг). Сила ящика указывает нам, какой максимальный вес он может иметь. Мы должны сформировать самую высокую кучу заданных ящиков (каждая из них имеет одинаковую высоту). Вы должны предложить алгоритм, который всегда будет давать оптимальное решение, которое является самой длинной последовательностью k блоков (k <= n).
Ну, это решение, которое я уже выяснил:
- Во-первых, мы сортируем все коробки по их весу (самые тяжелые идут внизу) и образуют кучу из них.
- Во-вторых, мы сортируем эту кучу по силе (самый сильный идет внизу).
- Затем для каждого ящика, начиная со дна, мы пытаемся вытащить его на дно, пока его сила позволяет ему.
- В конце концов, мы должны выяснить, сколько ящиков нужно удалить сверху, что приводит к тому, что некоторые ящики ниже имеют гораздо больше веса, чем могли.
Кажется, что этот алгоритм работает достаточно хорошо, но я не уверен, дает ли он всегда оптимальное решение - возможно, это не так. Я задавался вопросом о динамическом решении, аналогичном решению проблемы с рюкзаком, но я не уверен, что его можно решить таким образом. Кажется, нет оптимальной подструктуры для моей проблемы.
Заранее благодарим за любую помощь.:)