Я пытался решить проблему, в которой я должен вычислить количество возможных командных формирований для случайного спорта.Динамическое программирование Найти все возможные комбинации команд
вход что-то вроде этого:
P → Number of Team Players
R → Roles
[Min, Max] → Role 0
[Min, Max] → Role 1
...
[Min, Max] → Role r-1
----------
Min= Minimum number of Players for the Role
Max= Maximum number of Players for the Role
Возьмем, к примеру Sport1. Скажем, Sport1 как 3 типа ролей (A, B, C), теперь представим себе, что каждая команда имеет 8 игроков.
8 → Number of Team Players
3 → Roles
[3 , 7] → Role A
[1 , 5] → Role B
[0 , 2] → Role C
Правильные образования команды: [
3-5-0
,3-4-1
,3-3-2
,4-4-0
,4-3-1
,4-2-2
,5-3-0
,5-2-1
,5-1-2
,6-2-0
,6-1-1
,7-1-0
]Количество действительных свит команды: 12
Я уже решил это, перейдя на все возможные формации, и если сумма игроков в каждой роли равна количеству игроков команды, добавьте ее к окончательному результату. В противном случае добавьте ноль a.k.a., сделайте то же самое для следующей комбинации, пока конец не достигнут.
3 + 5 + 0 = 8 → действительное формирование команды.
3 + 5 +-> 8 → недействительной команда формирование
3 + 4 + 0 < 8 → недействительной команда формирование
Это все развлечения и игры, пока число игроков идет на что-то вроде 40 и число ролей примерно на 20, а Min = 0 и Max = 40 для каждой роли.
Пример:
40
20
[0; 40] → Role A
[0; 40] → Role B
...
[0; 40] → Role T
В этом случае я должен был бы проверить на 40^20 возможных образований для Wich я уже сделал некоторые сокращения, делая только для роли А0, а затем умножить на 20, но до сих пор необходимо проверить 40^19 различных комбинаций.
Эта проблема должна быть решена с использованием динамического программирования. Я уже использовал DP для решения некоторых проблем (проблемы последовательности, максимальные ящики клубники прибыли), но, похоже, не может найти способ решить эту проблему.
Может кто-нибудь дать некоторые огни о том, как решить эту проблему и/или аналогичные проблемы, которые я могу найти в Интернете или в книге, которая может привести меня к поиску решения DP для этого?
Я не уверен, что я получил его полностью ... Так, например, с примером, который я дал по моему вопросу: 8 игроков, 3 роли ... Создайте что-нибудь подобное http://prntscr.com/ 6jo812? Можете ли вы рассказать мне, как вы могли бы вычислить первую строку? Спасибо –
Каждая запись в первой строке равна 1, потому что только одна роль, которую вы выбрали, есть только один способ выделить доступных игроков доступным ролям. – mcdowella
Все еще не уверен, что вы подразумеваете под доступными игроками. Например, вторая строка у меня есть 2 роли, доступные 0 и 1, но количество игроков - это 8 из первой строки + количество игроков в столбце, которое я сейчас сейчас, или игроков первой линии и игроков второй колонны второго ряда? –