কম্পিউটার

C++ এ 0 এর সন্নিবেশ সহ দুটি অ্যারের সর্বাধিক ডট পণ্য খুঁজুন


ধরুন আমাদের কাছে m এবং n আকারের ধনাত্মক পূর্ণসংখ্যার দুটি অ্যারে আছে। m> n. দ্বিতীয় অ্যারেতে শূন্য ঢোকানোর মাধ্যমে আমাদের ডট পণ্যটিকে সর্বাধিক করতে হবে। একটি জিনিস আমাদের মনে রাখতে হবে যে আমরা প্রদত্ত অ্যারেগুলিতে উপাদানগুলির ক্রম পরিবর্তন করব না। ধরুন অ্যারেগুলি হল A =[2, 3, 1, 7, 8], এবং আরেকটি অ্যারে B =[3, 6, 7]। আউটপুট হবে 107। দ্বিতীয় অ্যারের প্রথম এবং তৃতীয় অবস্থানে 0s সন্নিবেশ করার পর আমরা ডট পণ্যটিকে সর্বাধিক করতে পারি। সুতরাং পণ্যটি হবে 2 * 0 + 3 * 3 + 1 * 0 + 7 * 6 + 8 * 7 =107।

এটি সমাধান করার জন্য, আমরা ডায়নামিক প্রোগ্রামিং পদ্ধতি ব্যবহার করব। সুতরাং A এর আকার m, এবং B এর আকার n। আমরা অর্ডারের (n + 1) x(m + 1) ডায়নামিক প্রোগ্রামিংয়ের জন্য একটি টেবিল তৈরি করব এবং এটি 0s দিয়ে পূরণ করব। এখন বাকি কাজগুলি করতে এই ধাপগুলি ব্যবহার করুন -

  • 1 থেকে n:

    রেঞ্জের মধ্যে i জন্য
    • j এর জন্য :=i থেকে m

      • j এর জন্য :=i থেকে m

  • টেবিল[i, j] :=সর্বোচ্চ(টেবিল[i - 1, j - 1] + A[j - 1] * B[i - 1], টেবিল[i, j - 1])

উদাহরণ

#include <iostream>
using namespace std;
long long int findMaximumDotProd(int A[], int B[], int m, int n) {
   long long int table[n+1][m+1];
   for(int i = 0; i<=n; i++){
      for(int j = 0; j<=m; j++){
         table[i][j] = 0;
      }
   }
   for (int i=1; i<=n; i++)
   for (int j=i; j<=m; j++)
   table[i][j] = max((table[i-1][j-1] + (A[j-1]*B[i-1])) , table[i][j-1]);
   return table[n][m] ;
}
int main() {
   int A[] = { 2, 3 , 1, 7, 8 } ;
   int B[] = { 3, 6, 7 } ;
   int m = sizeof(A)/sizeof(A[0]);
   int n = sizeof(B)/sizeof(B[0]);
   cout << "Maximum dot product: " << findMaximumDotProd(A, B, m, n);
}

আউটপুট

Maximum dot product: 107

  1. C++-এ একটি গাছে দুটি অ-ছেদহীন পথের সর্বাধিক গুণফল

  2. C++ এ পূর্ণসংখ্যার অ্যারেতে সর্বাধিক পণ্য সহ একটি জোড়া খুঁজুন

  3. C++ এ একটি অ্যারেতে সর্বাধিক GCD সহ জোড়া খুঁজুন

  4. C++ এ পণ্যের সমান LCM সহ সর্বাধিক দৈর্ঘ্যের সাবয়ারে