Прежде всего, я согласен с Брайаном, что сначала вам нужно иметь полное представление о проблеме, а затем об алгоритме, который есть в Интернете.
Вы сказали, что не каждый необязательный курс должен быть включен, это означает, что этот шаблон является единственным принятым:
obc xxxxxx
где obcявляется обязательным уроком, а x является обязательным или необязательным.Порядок не имеет значения, конечно.
Если у вас есть N обязательных и M необязательных курсов (очевидно, N + M> 7 или N + M = 7), то вы можете иметь только N принятых шаблонов вышеуказанного вида.
Затем вы должны найти все различные расписания этого вида:
XXXXXX (6 курсов)
здесь порядок не имеет значения, и повторение не допускается, поэтому вам нужны комбинациииз 6 из (N + M), что составит:
(N+M)!/[6!(N+M-6)!] = K different such timetables.
Тогда все различные расписания 7 курсов будут:
K + K +... + K (N раз) = N * K
(Проверьте, правильно ли это, действительно ли вы устали сегодня, иначе предложите какой-нибудь код).
Я надеюсь, что этоможет помочь