मान लीजिए, हमारे पास तीन सूचियाँ हैं जिनकी लंबाई समान है। ये समय सीमा, क्रेडिट और अवधि हैं। वे पाठ्यक्रम असाइनमेंट का प्रतिनिधित्व कर रहे हैं। i−th असाइनमेंट की समय सीमा के लिए [i] इसकी समय सीमा दिखाता है, क्रेडिट [i] अपना क्रेडिट दिखाता है, और अवधि [i] असाइनमेंट पूरा करने में लगने वाले दिनों की संख्या दिखाता है। एक असाइनमेंट को दूसरे को शुरू करने से पहले पूरा किया जाना चाहिए। हमें यह ध्यान रखना होगा कि हम नियत दिन पर एक असाइनमेंट पूरा कर सकते हैं और वर्तमान में हम दिन 0 की शुरुआत में हैं।
इसलिए, अगर इनपुट इस तरह है, समय सीमा =[7, 5, 10], क्रेडिट =[8, 7, 10], अवधि =[5, 4, 10], तो आउटपुट 10 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
नौकरियां:=सूची को क्रमबद्ध करें ज़िप (समय सीमा, अवधि, क्रेडिट)
-
dp() फ़ंक्शन को परिभाषित करें।
-
अगर मैं>=नौकरियों का आकार , तो
-
वापसी 0
-
-
उत्तर:=डीपी (i + 1, दिन)
-
समय सीमा, अवधि, क्रेडिट:=नौकरियां [i]
-
यदि दिन + अवधि - 1 <=समय सीमा, तो
-
उत्तर:=अधिकतम उत्तर, डीपी (i + 1, दिन + अवधि) + क्रेडिट
-
-
वापसी उत्तर
-
मुख्य विधि से वापसी 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