Всего доступно n вопросов. Цель состоит в том, чтобы найти и сгенерировать как можно больше тестов при следующих условиях.
ВВОД:
- Каждый вопрос относится к любой из 3 категорий , а именно
JAVA
, PYTHON
и MYSQL
- Каждый вопрос относится к любому из двух уровней сложности.
EASY
и DIFFICULT
ПРАВИЛА, КОТОРЫЕ ВОПРОС ДОЛЖЕН Удовлетворять:
-
В каждой категории должно быть не менее 1 вопроса (java | python | mysql).
не менее 2 вопросов из каждый уровень сложности.
Тест должен содержать ровно 5 вопросов. (Позволяет позвонить по этому номеру K )
Вопрос, однажды добавленный в тест, не может повторяться ни в одном другом тесте.
Я попробовал наивный способ со следующей стратегией:
Форма н / к групп.
Если есть 15 вопросов и k = 4, мы можем сформировать не более 15/4 = 3 тестов (групп).
Для в каждой группе, перебирайте вопросы и добавляйте их в эту группу, если она удовлетворяет условиям.
Если вопрос добавлен, уменьшите требования к сложности теста и требования к категории
Как только у нас будут группы с минимальными условиями, выполните итерации по оставшимся вопросам и добавьте их в тесты, чтобы тест содержал K вопросов.
Проблема с этим Это работает, только если входные вопросы находятся в определенном c благоприятном порядке. Я запустил программу со случайными перемешанными входными вопросами. Я получил разные выводы. ( Я могу поделиться кодом, если требуется )
Итак, как я понял, вышеприведенное решение не является надежным. Мы должны тщательно проверить все комбинации вопросов. Казалось, что это очень похоже на Минимальная проблема с монетами .
Это отличается от MCC
следующими способами
- Количество монет ограничено. {1,1,2,2,2,3,4,5}
- Нам нужно не количество монет, а группа монет, удовлетворяющих некоторым условиям.
- Развернуть. не минимизировать.
- Максимизировать количество групп (не монет), которые удовлетворяют заданным условиям.
Я знаю, что для этого существует решение DP. Я потратил пару дней, пытаясь установить связь с возвращением. Но я не мог прийти к одному.
Как я могу решить эту проблему с помощью DP? Как я могу получить рекуррентное отношение для этой проблемы? Пожалуйста, начните с рекурсивного решения, если это возможно