ধরুন আমাদের অন্তরের একটি তালিকা আছে যেখানে প্রতিটি ব্যবধানে তিনটি মান রয়েছে [শুরু, শেষ, লাভ]। আমরা একবারে একটি মাত্র কাজ করতে পারি, আমাদের সবচেয়ে বেশি মুনাফা খুঁজে বের করতে হবে।
সুতরাং, ইনপুট যদি অন্তরের মত হয় =[[1, 2, 100],[3, 5, 40],[6, 19, 150],[2, 100, 250]], তাহলে আউটপুট হবে 350, যেহেতু আমরা এই দুটি বিরতি নিতে পারি [1, 2, 100] এবং [2, 100, 250]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব
- d :=একটি খালি মানচিত্র যাতে মান হিসাবে তালিকা রয়েছে
- n :=0
- ব্যবধানে প্রতিটি (শুরু, শেষ, লাভ) জন্য, করুন
- যদি শেষ> n হয়, তাহলে
- n :=শেষ
- যদি শেষ> n হয়, তাহলে
- d[শেষ] এ জোড়া (শুরু, শেষ) ঢোকান
- A :=n + 1 আকারের একটি তালিকা এবং 0 দিয়ে পূরণ করুন
- পরিসীমা 0 থেকে A এর আকারের জন্য, করুন
- যদি শেষ d হয়, তাহলে
- প্রতিটি (শুরু, লাভ) জোড়ার জন্য d[শেষ], করুন
- A[শেষ] :=সর্বাধিক A[শেষ], (A[শুরু] + লাভ) এবং A[শেষ - 1]
- প্রতিটি (শুরু, লাভ) জোড়ার জন্য d[শেষ], করুন
- অন্যথায়,
- A[শেষ] :=A[শেষ - 1]
- যদি শেষ d হয়, তাহলে
- A এর শেষ মান ফেরত দিন
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
সংগ্রহ থেকে আমদানি ডিফল্টডিক্টক্লাস সমাধান:def solve(self, intervals):d =defaultdict(list) n =0 শুরু, শেষ, বিরতিতে লাভের জন্য:যদি শেষ> n:n =শেষ d[end].append( [শুরু, লাভ]) A =[0 এর জন্য i রেঞ্জে (n + 1)] পরিসরের শেষের জন্য (len(A)):যদি শেষ হয় d:শুরুর জন্য, d[শেষে] লাভ:A[শেষ] =সর্বোচ্চ(A[শেষ], A[শুরু] + লাভ, A[শেষ - 1]) অন্য:A[শেষ] =A[শেষ - 1] ফেরত A[-1]ob =সমাধান()ব্যবধান =[[ 1, 2, 100],[3, 5, 40],[6, 19, 150],[2, 100, 250]]প্রিন্ট(ob.solve(intervals))
ইনপুট
[[1, 2, 100],[3, 5, 40], [6, 19, 150],[2, 100, 250]]আউটপুট
350