-
-
Notifications
You must be signed in to change notification settings - Fork 50.3k
My first contrib #13361
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
My first contrib #13361
Changes from 6 commits
52d1eca
147c3ac
34c7ecd
6b73c38
97130b5
e9d90ee
0aa46a0
dc23e00
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| """ | ||
| Weighted Job Scheduling Problem | ||
| Given jobs with start time, end time, and profit, find the maximum profit | ||
| subset of non-overlapping jobs. | ||
| https://en.wikipedia.org/wiki/Weighted_interval_scheduling | ||
| """ | ||
|
|
||
| from bisect import bisect_right | ||
| from typing import List, Tuple | ||
|
Check failure on line 9 in dynamic_programming/job_scheduling.py
|
||
|
|
||
|
|
||
| def job_scheduling(jobs: List[Tuple[int, int, int]]) -> int: | ||
|
Check failure on line 12 in dynamic_programming/job_scheduling.py
|
||
| """ | ||
| >>> jobs = [(1, 3, 50), (3, 5, 20), (0, 6, 100), (4, 6, 70), (3, 8, 60)] | ||
| >>> job_scheduling(jobs) | ||
| 120 | ||
| >>> jobs = [(1, 2, 50), (3, 5, 20), (6, 19, 100), (2, 100, 200)] | ||
| >>> job_scheduling(jobs) | ||
| 250 | ||
| """ | ||
| if not jobs: | ||
| return 0 | ||
|
|
||
| jobs.sort(key=lambda x: x[1]) | ||
|
||
| n = len(jobs) | ||
| dp = [0] * n | ||
| dp[0] = jobs[0][2] | ||
| end_times = [job[1] for job in jobs] | ||
|
|
||
| for i in range(1, n): | ||
| profit_incl = jobs[i][2] | ||
| # ✅ allow jobs that start when another ends | ||
| index = bisect_right(end_times, jobs[i][0]) - 1 | ||
| if index != -1: | ||
| profit_incl += dp[index] | ||
| dp[i] = max(profit_incl, dp[i - 1]) | ||
|
|
||
| return dp[-1] | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please provide descriptive name for the parameter:
x