Нов съм тук, но имам въпрос, намерен в моя учебник. За съжаление няма отговори, така че се чудех дали някой може да помогне. Въпросът е:
Получавате задачата да разпространявате покани в рамките на една компания. Имате време да говорите само с определен брой хора, но ви е гарантирано, че ако поканите някого, той ще покани своя шеф, този човек ще покани своя шеф и така нататък, чак до главния изпълнителен директор. Начертали сте цялата йерархия на компанията и сте присвоили стойност на всеки човек, показвайки колко ценно би било да ги поканите. Като се има предвид тази настройка и ограничението за броя на хората, с които можете да говорите, искате да изчислите оптималния набор от хора, които да поканите. Оптимален набор от хора ще увеличи максимално общата стойност на всички лица, поканени, пряко или непряко, от вашия избор.
Ще има точно един човек, главният изпълнителен директор, без шеф в йерархията. Всички други хора в крайна сметка ще отговарят на този човек по командната верига, но не непременно директно.
Гарантирано ви е, че всеки човек ще има най-много един шеф, но този шеф може да има друг на свой ред. Например, лице A може да има шеф B, чийто шеф е C, чийто шеф е D, чийто шеф е CEO. По този начин влиянието върху лице A автоматично ще повлияе на B, C, D и главния изпълнителен директор.
Различни служители може да имат общи шефове в командната верига. Вие НЕ получавате допълнителна стойност за влияние върху човек повече от веднъж. Например, ако A и B отговарят директно на изпълнителния директор и вие влияете и на двамата, ще получите стойност val(A)+val(B)+val(CEO), а не val(A)+val(B) +2val (изпълнителен директор).
Дадено е положително цяло число j, изберете j души, които в крайна сметка ще доведат до най-голямата обща стойност.
Знам, че подходът на груба сила е просто да търсите в списъка максималната стойност j пъти, но това не е много полезно. Мисля, че има подход за динамично програмиране, но опитът ми не винаги дава правилния отговор. Всяка помощ ще бъде оценена!