### Description

Requirements:

1. Your task is to write a C program to solve the **two-room** weighted interval scheduling problem by using dynamic programming. The first line of the input will be the number of intervals (n) and each of the remaining n lines have three non-negative integers (si,fi ,vi ) for the start time, finish time and weight for an interval. n will not exceed 50. The intervals will be ordered by ascending finish time. You should echo the input.

2. You should print your dynamic programming table(s) with appropriate labeling.

3. Your solution should be formatted as:

a. A line with just the number of intervals assigned to the first room.

b. A line for each of the intervals assigned to the first room: start time, finish time, weight.

c. A line with just the number of intervals assigned to the second room.

d. A line for each of the intervals assigned to the second room: start time, finish time, weight.

e. A line with the total weight that has been achieved

and appear at the end of your output. No particular ordering of the intervals is required.

Getting Started:

1. The input should be read from standard input (which will be one of 1. keyboard typing, 2. a shell redirect (<) from a file, or 3. cut-and-paste). Do NOT prompt for a file name! Do not use fgets().

2. All output should go to standard output.

3. Your solution **must** use dynamic programming to maximize the total weight of the intervals assigned to the two rooms. The intervals assigned to a room may not overlap (two intervals

*i*and

*j*overlap if either or .).

4. Applying the simple (one room) solution in Notes 7.B to get a maximum solution for one room and then applying the same technique again to the leftover intervals (to assign intervals to the second room) is a **non-optimal** greedy technique

**.**

__that will receive zero points__5. The notion of rightmost preceding intervals is still useful in deriving the detailed cost function.

6. It is useful to have the cost function *M*(*i*, *j*) = Total cost for optimal non-overlapping subsets for the two rooms. Room one may use the first *i* input intervals. Room two may use the first *j* input intervals. An interval may only be used once. Some observations:

a. *M*(*i*, *j*) = *M*(*j*, *i*)

b. *M*(*i*, 0) = *M*(0, *i*) = *M*(*i*) from the one-room version in Notes 7.b. (You may reuse this code.)

c. *M*(*i*, *i*) = *M*(*i*, *i* – 1)

7. (The great point in understanding this assignment). Suppose you are attempting to compute *M*(*i*, *j*) with *i* > *j*. The only issue is: Should interval *i* be placed in room one?