Всем доброе времени суток!
Возникла следующая проблема, буду признателен за подсказку в решений, или за "направление" мысли в нужном направлении.
Имеем:
Список договоров.
Каждый договор состоит из определенных пунктов.
Количество пунктов в договоре случайное.
Пункты в договоре не повторяются.
Всего существует...например до 15 пунктов договора.
Пункты различаются по "значимости".
Пункт с наибольшим номером самый значимый, с наименьшим менее важный.
Каждый договор имеет свою "стоимость", например в рублях.
Стоимость не зависит от набора пунктов в договоре и их значимости.
У договора есть важность.
Важность договора состоит из суммы значимости включенных в него пунктов.
Пример:
Договор стоимостью 200 р., состоит из пункта 1, пункта 6 и пункта 13. Важность договора 20;
Договор стоимостью 100 р., состоит из пункта 4, пункта 8, пункта 14 и пункта 15. Важность договора 41;
Цель:
Есть базовая стоимость N = 100
Имеем 15 случайных договоров, цена каждого договора дороже базовой стоимости, но не более чем на 50%. Т.е. при нашей базовой стоимости, цена договора будет: 100 < Цена договора <= 150
У каждого договора случайным набор пунктов, но не меньше 1.
Нужно выбрать по одному договору в каждой колонке:
первая колонка: дороже стоимости
N на 1% - 10%
вторая колонка: дороже стоимости
N на 11% - 20%
третья колонка: дороже стоимости
N на 21% - 30%
четвёртая колонка: дороже стоимости
N на 31% - 40%
пятая колонка: дороже стоимости
N на 41% - 50%
Правила отбора:
1. Выбираемые договоры в каждой колонке должны различаться по количеству в них пунктов в большую сторону по мере удорожания.
2. Нельзя выбирать одинаковые договоры, а договоры равны, если имеют одинаковое количество пунктов и при этом их важность равна.
3. Если нельзя равномерно выбрать по договору в каждой колонке, то можно выбирать по несколько договор из одной колонки, но только если они удовлетворяют двум первым правилам.
И вот вопрос по задаче: каким алгоритмом надо пользоваться что бы найти максимально возможную заполненность колонок.