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

পাইথনে সব সম্ভাব্য বৈধ পথ থেকে সর্বোচ্চ স্কোর বের করার প্রোগ্রাম


মনে করুন nums1 এবং nums2 নামক দুটি অ্যারে আছে। একটি বৈধ পথ নিচেরভাবে ডিফাইন করা হয়েছে:

  • nums1 অথবা nums2 সিলেক্ট করুন ট্রাভার্স করার জন্য (ইনডেক্স-০ থেকে)।

  • অ্যারেটি বাম থেকে ডানে ট্রাভার্স করুন।

এখন, যদি আমরা যেকোনো ভ্যালুতে পৌঁছাই যা nums1 এবং nums2 দুটোতেই থাকে, তবে আমরা অন্য অ্যারেতে সুইচ করতে পারি। এখানে স্কোর হলো একটি বৈধ পথে যুনিক ভ্যালুগুলোর যোগফল। সব সম্ভাব্য বৈধ পথ থেকে সর্বোচ্চ স্কোর বের করতে হবে। উত্তর বড় হলে 10^9+7 দিয়ে মডুলো রিটার্ন করুন।

যেমন, ইনপুট nums1 = [3,5,6,9,11], nums2 = [5,7,9,10] হলে, আউটপুট হবে ৩৫ কারণ:

  • nums1 থেকে শুরু হওয়া বৈধ পথগুলো: [3,5,6,9,11], [3,5,6,9,10], [3,5,7,9,10], [3,5,7,9,11]

  • nums2 থেকে শুরু হওয়া বৈধ পথগুলো: [5,7,9,10], [5,6,9,11], [5,6,9,10], [5,7,9,11]

পাইথনে সব সম্ভাব্য বৈধ পথ থেকে সর্বোচ্চ স্কোর বের করার প্রোগ্রাম

সর্বোচ্চ হলো [3,5,7,9,11]।

সমাধান পদ্ধতি

এই সমস্যাটি সমাধান করতে নিচের ধাপগুলো অনুসরণ করুন:

  • M := nums1-এর সাইজ, N := nums2-এর সাইজ

  • sum1 := 0, sum2 := 0

  • i := 0, j := 0

  • res := 0

  • যখন i < M এবং j < N, तब

    • যদি nums1[i] < nums2[j] হয়, তবে

      • sum1 += nums1[i], i++

    • অন্যথায় যদি nums1[i] > nums2[j] হয়, তবে

      • sum2 += nums2[j], j++

    • অন্যথায় (সমান হলে),

      • res += max(sum1, sum2) + nums1[i]

      • i++, j++

      • sum1 := 0, sum2 := 0

  • যখন i < M, तब

    • sum1 += nums1[i], i++

  • যখন j < N, तब

    • sum2 += nums2[j], j++

  • return (res + max(sum1, sum2)) % 1000000007

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বোঝার জন্য:

def solve(nums1, nums2):    M, N = len(nums1), len(nums2)    sum1, sum2 = 0, 0    i, j = 0, 0    res = 0    while i < M and j < N:       if nums1[i] < nums2[j]:          sum1 += nums1[i]          i += 1       elif nums1[i] > nums[2][j]:          sum2 += nums2[j]          j += 1       else:          res += max(sum1, sum2) + nums1[i]          i += 1         j += 1 sum1 = 0 sum2 = 0 while i < M: sum1 += nums1[i] i += 1 while j < N: sum2 += nums2[j] j += 1 return (res + max(sum1, sum2)) % 1000000007 nums1 = [3,5,6,9,11] nums2 = [5,7,9,10] print(solve(nums1, nums2))

ইনপুট

[3,5,6,9,11], [5,7,9,10] 

আউটপুট

35

  1. পাইথনে অ্যারের সব সাবসেটের ম্যাক্স-মিন পার্থক্যের যোগফল বের করুন

  2. পাইথন প্রোগ্রাম ডিকশনারির সব আইটেমের যোগফল বের করা

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

  4. পাইথন প্রোগ্রাম: দেওয়া স্ট্রিং থেকে সকল সম্ভাব্য বৈধ IP ঠিকানা জেনারেট করা