ধরুন আমাদের কাছে সংখ্যা নামক সংখ্যার একটি তালিকা রয়েছে যেখানে প্রতিটি মান একটি কাজ শেষ করতে সময়ের একক নির্ধারণ করছে। আমরা যেকোন অ-পরপর টাস্ক এড়িয়ে যেতে পারি, আমাদের সব কাজ শেষ করতে ন্যূনতম সময় বের করতে হবে।
সুতরাং, যদি ইনপুটটি nums =[11, 6, 8, 16] এর মত হয়, তাহলে আউটপুট হবে 14, কারণ আমরা প্রথম এবং শেষ কাজগুলি এড়িয়ে যেতে পারি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:
- n :=সংখ্যার আকার
- টেবিল :=একটি n x 2 ম্যাট্রিক্স তৈরি করুন এবং এটি 0 দিয়ে পূরণ করুন
- টেবিল[0, 0] :=0
- টেবিল[0, 1] :=সংখ্যা[0]
- 1 থেকে n - 1 রেঞ্জের জন্য, করুন
- টেবিল[i, 0] :=টেবিল[i - 1, 1]
- টেবিল[i, 1] =(সর্বনিম্ন টেবিল[i - 1, 0] এবং টেবিল[i - 1][1]) + সংখ্যা[i]
- সারণী সারির সর্বনিম্ন রিটার্ন [n - 1]
আরও ভালভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি:
উদাহরণ
class Solution: def solve(self, nums): n = len(nums) table = [[0] * 2 for _ in range(n)] table[0][0] = 0 table[0][1] = nums[0] for i in range(1, n): table[i][0] = table[i - 1][1] table[i][1] = min(table[i - 1][0], table[i - 1][1]) + nums[i] return min(table[n - 1]) ob = Solution() nums = [11, 6, 8, 16] print(ob.solve(nums))
ইনপুট
[11, 6, 8, 16]
আউটপুট
14