Menu
CoddyTech

Job Sequencing Problem

מקבלים n עבודות כשני מערכים: עבודה i מניבה profit[i] אם היא מסתיימת עד למועד האחרון deadline[i]. כל עבודה נמשכת יחידת זמן אחת, מבצעים עבודה אחת בכל פעם החל בזמן 0, ואפשר לדלג על כל עבודה. אפשר לבצע עבודה עם מועד אחרון 2 בין 0 ל־1 או בין 1 ל־2.

החזירו את הרווח הכולל המרבי שאפשר להרוויח.

פונקציה

jobSequencing(deadline: integer-array, profit: integer-array) → integer
deadlineinteger-array
הזמן שבו כל משימה צריכה להסתיים, מ־1 עד n
profitinteger-array
מה כל עבודה מרוויחה; profit[i] שייך ל-deadline[i]
מחזירהinteger
הרווח הכולל הגדול ביותר של העבודות שיכולות להסתיים כולן עד מועדי היעד שלהן

אילוצים

  • 1 ≤ deadline.length == profit.length ≤ 5000
  • 1 ≤ deadline[i] ≤ n, כאשר n הוא מספר המשימות
  • 1 ≤ profit[i] ≤ 105
  • המערכים אינם ממוינים. לכמה משימות עשויים להיות אותו מועד אחרון או אותו רווח.

דוגמאות

קלט
deadline = [3, 1, 2, 3, 1]profit = [40, 35, 30, 25, 50]
פלט
120
הסבר
רק אחת משתי העבודות עם מועד אחרון 1 מתאימה, לכן בצע את זו ששווה 50. העבודה ששווה 30 מסתיימת אז במועד האחרון שלה, 2, והעבודה ששווה 40 במועד האחרון שלה, 3: 50 + 30 + 40 = 120.
challenge icon

שאלת המשך

מה אם ביצוע משימה i אורך duration[i] יחידות זמן במקום יחידה אחת? האם בחירת המשימה הרווחית ביותר תחילה עדיין תיתן את הרווח הכולל הטוב ביותר?

איפוס הקוד
def jobSequencing(deadline, profit):
    # כתבו כאן קוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

deadline = [3, 1, 2, 3, 1]
profit = [40, 35, 30, 25, 50]

הפלט הצפוי

120