কম্পিউটার টিউটোরিয়াল

পাইথনে গাছের উন্নতি খরচে আশেপাশের গাছের উচ্চতা ভিন্ন রাখার ন্যূনতম খরচ

একটি লিস্ট heights (গাছের উচ্চতা) এবং costs (প্রতি ইউনিট উচ্চতা বেড়ানোর খরচ) দেওয়া আছে। আশেপাশের দুটি গাছের উচ্চতা একই না হয় এমনভাবে ন্যূনতম খরচে উচ্চতা বেড়াতে হবে।

উদাহরণ: heights = [3, 2, 2], costs = [2, 5, 3] → আউটপুট 3 (শেষ গাছের উচ্চতা ১ বাড়াতে খরচ ৩)।

সমাধানের ধাপসমূহ (DP / মেমোরাইজেশন)

  1. dp(idx, l_height) ফাংশন: idx-তম গাছ প্রসেস করা হচ্ছে, বাম পাশের গাছের Höhen l_height।

  2. বেস কেস: লাস্ট গাছ হলে, যদি heights[idx] != l_height হয় তবে ০, অন্যথায় costs[idx] (১ ইউনিট বেড়াতে হবে)।

  3. ret = inf। i = 0,1,2 (০, ১, ২ ইউনিট বেড়ানো) ট্রাই করুন।

  4. যদি heights[idx] + i != l_height হয়, তবে ret = min(ret, dp(idx+1, heights[idx]+i) + costs[idx]*i)।

  5. ret রিটার্ন করুন। মেইন থেকে dp(0, None) কল করুন।

পাইথন কোড উদাহরণ

class Solution:
    def solve(self, heights, costs):
        def dp(idx, l_height):
            if idx == len(heights) - 1:
                return 0 if heights[idx] != l_height else costs[idx]
            ret = float("inf")
            for i in range(3):
                if heights[idx] + i != l_height:
                    ret = min(ret, dp(idx + 1, heights[idx] + i) + costs[idx] * i)
            return ret
        return dp(0, None)

ob = Solution()
heights = [3, 2, 2]
costs = [2, 5, 3]
print(ob.solve(heights, costs))

ইনপুট

[3, 2, 2], [2, 5, 3]

আউটপুট

3
  1. পাইথনে স্টিক কাট করার ন্যূনতম খরচ বের করার প্রোগ্রাম

  2. পাইথনে সব পয়েন্ট কানেক্ট করার ন্যূনতম খরচ বের করার প্রোগ্রাম

  3. পাইথনে একই x বা y কোঅর্ডিনেট वाले নিকটতম পয়েন্ট খুঁজে বের করা

  4. পাইথনে বাইনারি ট্রি রঙিন করা যাবে কিনা যাতে সংলগ্ন নোডগুলোর রঙ এক নহয় তা যাচাই করার প্রোগ্রাম