কম্পিউটার

পাইথনে সর্বোচ্চ যোগফলের জন্য পার্টিশন অ্যারে


ধরুন আমাদের একটি পূর্ণসংখ্যা অ্যারে A আছে, আমাদের অ্যারেটিকে সর্বাধিক K দৈর্ঘ্যের (সংলগ্ন) সাবয়ারেতে পার্টিশন করতে হবে। পার্টিশন করার পরে, প্রতিটি সাবয়ারের মান পরিবর্তন করে সেই সাবয়ারের সর্বোচ্চ মান হয়ে যায়। পার্টিশন করার পরে আমাদের প্রদত্ত অ্যারের বৃহত্তম যোগফল খুঁজে বের করতে হবে। সুতরাং যদি ইনপুট হয় [1, 15, 7, 9, 2, 5, 10] এবং k =3, তাহলে আউটপুট হবে 84। এর কারণ হল অ্যারেটি [15, 15, 15, 9, 10, 10] হয়ে যায়। , 10]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • A এর মতো দৈর্ঘ্যের একটি অ্যারে ডিপি করুন এবং এটি 0 দিয়ে পূরণ করুন
  • আমি 0 থেকে A - 1 এর দৈর্ঘ্যের মধ্যে
    • dp[i] =A[i] + dp[i - 1] যদি i – 1>=0 অন্যথায় 0
    • temp :=A[i]
    • 1 থেকে k – 1
        পরিসরে j-এর জন্য
      • যদি i – j>=0
        • সূচক :=i – j
        • temp :=তাপমাত্রার সর্বোচ্চ এবং A[i - j]
        • যদি সূচক – 1>=0, তারপর
          • dp[i] :=dp[i] এবং (temp*(i – index + 1) + dp[index - 1])
        • অন্যথায় dp[i] :=সর্বাধিক dp[i] এবং 0
  • ডিপির শেষ উপাদান ফেরত দিন

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

class Solution(object):
   def maxSumAfterPartitioning(self, A, K):
      dp = [0 for i in range(len(A))]
      for i in range(len(A)):
         dp[i] = A[i] + (dp[i-1] if i-1>=0 else 0)
         temp = A[i]
         for j in range(1,K):
            if i-j>=0:
               index = i-j
               temp = max(temp,A[i-j])
               dp[i] = max(dp[i],temp*(i-index+1) + (dp[index-1] if index-1 >=0 else 0))
      return dp[-1]
ob = Solution()
print(ob.maxSumAfterPartitioning([1,15,7,9,2,5,10],3))

ইনপুট

[1,15,7,9,2,5,10]
3

আউটপুট

84

  1. গণনা সাজানোর জন্য পাইথন প্রোগ্রাম

  2. অ্যারে রোটেশনের জন্য পাইথন প্রোগ্রাম

  3. অ্যারের যোগফল খুঁজে পেতে পাইথন প্রোগ্রাম

  4. সন্নিবেশ সাজানোর জন্য পাইথন প্রোগ্রাম