Я новичок здесь, но нашел вопрос в моем учебнике. К сожалению, на него нет ответов, поэтому мне было интересно, может ли кто-нибудь помочь. Вопрос в том:
Вам дается задание распространять приглашения внутри компании. У вас есть время поговорить только с определенным количеством людей, но вам гарантировано, что если вы пригласите кого-то, то они пригласят своего босса, этот человек пригласит своего босса и так далее, вплоть до генерального директора. Вы наметили всю иерархию компании и присвоили значение каждому человеку, указав, насколько ценно было бы пригласить их. Учитывая эту настройку и ограничение на количество людей, с которыми вы можете поговорить, вы хотите вычислить оптимальный набор людей для приглашения. Оптимальный набор людей максимизирует общую стоимость всех лиц, прямо или косвенно приглашенных по вашему выбору.
В иерархии будет ровно один человек, генеральный директор, без начальника. Все остальные люди в конечном итоге будут подчиняться этому человеку в командной цепочке, но не обязательно напрямую.
Вам гарантируется, что у каждого человека будет не более одного босса, но у этого босса, в свою очередь, может быть еще один. Например, у человека А может быть начальник Б, чьим начальником является С, чьим начальником является D, чьим начальником является генеральный директор. Таким образом, влияние на человека А автоматически повлияет на В, С, D и генерального директора.
У разных сотрудников могут быть общие начальники в командной цепочке. Вы НЕ получаете дополнительную ценность за влияние на человека более одного раза. Например, если A и B оба подчиняются непосредственно генеральному директору, и вы влияете на обоих, вы получите значение val(A)+val(B)+val(CEO), а не val(A)+val(B) +2val(генеральный директор).
Учитывая положительное целое число j, выберите j людей, которые в конечном итоге приведут к наибольшему общему значению.
Я знаю, что подход грубой силы состоит в том, чтобы просто искать в списке максимальное значение j раз, но это не очень полезно. Я думаю, что есть подход динамического программирования, но моя попытка не всегда давала правильный ответ. Любая помощь будет оценена по достоинству!