Back to challenges
Hard 0 solved 0% acceptance

Maximum Project Rewards

Choose nonoverlapping projects to earn the largest total reward.

What you'll learn

  • Sort intervals by end time
  • Find the last compatible project with binary search
  • Choose between taking and skipping a project

Problem

Each project is [start_day, end_day, reward]. It occupies every day from start_day through end_day, including both endpoints. You can participate in only one project on a day. Choose a subset with the largest total reward. A project starting on another project’s end day conflicts with it.

Implement project_rewards(projects).

Input

projects: Rows of three integers: start day, end day, and reward.

Output

Return the maximum total reward; the chosen projects need not be returned.

Constraints

1 ≤ projects ≤ 200,000. 1 ≤ start_day ≤ end_day ≤ 1,000,000,000. Rewards are positive integers at most 1,000,000,000.

Examples

Example 1
Input:
projects = [
    [1, 2, 4],
    [3, 4, 5],
    [2, 3, 10]
]

Expected output:
expected = 10
Input:
std::vector<std::vector<long long>> projects = {
    {1, 2, 4},
    {3, 4, 5},
    {2, 3, 10}
};

Expected output:
long long expected = 10;
Input:
long[][] projects = new long[][] {
    new long[] {1, 2, 4},
    new long[] {3, 4, 5},
    new long[] {2, 3, 10}
};

Expected output:
long expected = 10;

Explanation

The first two projects earn 9 together. The last earns 10 and conflicts with both, so choose it alone.

Example 2
Input:
projects = [
    [1, 2, 4],
    [2, 3, 5]
]

Expected output:
expected = 5
Input:
std::vector<std::vector<long long>> projects = {
    {1, 2, 4},
    {2, 3, 5}
};

Expected output:
long long expected = 5;
Input:
long[][] projects = new long[][] {
    new long[] {1, 2, 4},
    new long[] {2, 3, 5}
};

Expected output:
long expected = 5;

Explanation

Both occupy day 2. Choose only the second, with reward 5.

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

This is a weighted interval scheduling problem with overlapping time ranges.

Hint 2

Sort projects by end day and combine each project with the latest compatible earlier one.

Hint 3

Be precise about conflicts: another project starting on an end day still overlaps.

Expected complexity

O(n log n) time, O(n) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.