deadlines, credits, durations ত্রি তালিকা দেওয়া আছে যা কোর্স অ্যাসাইনমেন্ট নির্দেশ করে। একটি অ্যাসাইনমেন্ট শেষ না হওয়া পর্যন্ত অন্য শুরু করা যায় না। দিন ০ থেকে শুরু করে সর্বোচ্চ ক্রেডিট উপার্জন করতে হবে।
উদাহরণ: deadlines=[7,5,10], credits=[8,7,10], durations=[5,4,10] হলে আউটপুট ১০।
সমাধানের ধাপসমূহ
- jobs := (deadline, duration, credit) জোড়া সর্ট করুন
- dp(i, day) ফাংশন সংজ্ঞায়িত করুন:
- যদি i >= len(jobs) হয় তবে 0 ফেরত দিন
- ans := dp(i+1, day)
- যদি 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