Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Recently, I came across this problem in my textbook. Any hints on how to solve this using dynamic programming?

"Professor Stewart is consulting for the president of a corporation that is planning a company party. The company has a hierarchical structure; that is, the supervisor relation forms a tree rooted at the president. The personnel office has ranked each employee with a conviviality rating, which is a real number. In order to make the party fun for all attendees, the president does not want both an employee and his or her immediate supervisor to attend. Professor Stewart is given the tree that describes the structure of the corporation, using the left-child, right-sibling representation. Each node of the tree holds, in addition to the pointers, the name of an employee and that employee’s conviviality ranking. Describe an algorithm to make up a guest list that maximizes the sum of the conviviality ratings of the guests."

share|cite|improve this question
This question may be more suitable on – kennytm Sep 28 '10 at 6:34
This is not in anyway programming related. – Sahni Sep 28 '10 at 8:39
Or you can try to ask this at theoretical computer science SE – Graviton Sep 28 '10 at 11:18
Given that you ask "Any hints on how to solve this using dynamic programming?", how can this not be programming-related? – Isaac Sep 28 '10 at 12:27
According to dynamic programming is not a subset of computer programming. – Rasmus Sep 29 '10 at 15:10

I'll give you a hint without referring to the representation of the graph:

Given a tree structure of a corporation, you can either have the root (president) attend the party or not. Say the root has n children. If the root is not in the party, you can have a party which is the "sum" of n different parties, each representing the subtree at each of the n children (this is the recursive step). If the root is in the party, then you again have the sum of n different parties, but this time each "subparty" cannot have its root included (this is another recursive step).

You can reformat this recursion into a dynamic programming solution, or solve it recursively with memoization.

share|cite|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.