मान लीजिए हमारे पास तीन सूचियाँ हैं जिनकी लंबाई समान है: deadlines, credits, और durations। ये कोर्स असाइनमेंट दर्शाते हैं। i-वें असाइनमेंट के लिए deadlines[i] इसकी अंतिम तिथि, credits[i] इसका क्रेडिट, और durations[i] इसे पूरा करने में लगने वाले दिन हैं। एक असाइनमेंट को दूसरे से पहले पूरा करना होगा। हम असाइनमेंट को उसकी देय तिथि के दिन पूरा कर सकते हैं और हम वर्तमान में दिन 0 की शुरुआत में हैं। अधिकतम क्रेडिट ज्ञात करें।
उदाहरण के लिए, deadlines=[7,5,10], credits=[8,7,10], durations=[5,4,10] के लिए आउटपुट 10 होगा।
एल्गोरिदम (DP + डेडलाइन द्वारा सॉर्टिंग)
jobs := zip(deadlines, durations, credits) को डेडलाइन के अनुसार सॉर्ट करेंdp(i, day)फ़ंक्शन परिभाषित करें:- यदि
i >= len(jobs), तो 0 वापस करें ans = dp(i+1, day)(छोड़ें)deadline, duration, credit = jobs[i]- यदि
day + duration - 1 <= deadline, तोans = max(ans, dp(i+1, day+duration) + credit)(लें) ansवापस करें
- यदि
dp(0, 0)वापस करें
उदाहरण
class Solution:
def solve(self, deadlines, credits, durations):
jobs = sorted(zip(deadlines, durations, credits))
def dp(i=0, day=0):
if i >= len(jobs): return 0
ans = dp(i+1, day)
deadline, duration, credit = jobs[i]
if day + duration - 1 <= deadline:
ans = max(ans, dp(i+1, day+duration) + credit)
return ans
return dp()
ob = Solution()
deadlines = [7,5,10]
credits = [8,7,10]
durations = [5,4,10]
print(ob.solve(deadlines, credits, durations))
इनपुट
[7, 5, 10], [8, 7, 10], [5, 4, 10]
आउटपुट
10