কম্পিউটার

C++ এ একবার মিলিত হওয়ার অনুমতিপ্রাপ্ত দুই ব্যক্তির দ্বারা সংগৃহীত সর্বাধিক পয়েন্ট


এই টিউটোরিয়ালে, আমরা একবার দেখা করার অনুমতিপ্রাপ্ত দুজন ব্যক্তির দ্বারা সংগৃহীত সর্বাধিক পয়েন্ট খুঁজে বের করার জন্য একটি প্রোগ্রাম নিয়ে আলোচনা করব

এর জন্য আমাদেরকে একটি ম্যাট্রিক্স দেওয়া হবে যেখানে বিন্দু রয়েছে। আমাদের কাজ হল পথ খুঁজে বের করা যখন দুই কোণ থেকে শুরু করে দুজন লোক এমনভাবে মিলিত হয় যে তাদের সর্বাধিক পয়েন্ট সংগ্রহ করা হয়।

উদাহরণ

#include<bits/stdc++.h>
#define M 3
#define N 3
using namespace std;
int findMaxPoints(int A[][M]) {
   //storing points
   int P1S[M+1][N+1], P1E[M+1][N+1];
   memset(P1S, 0, sizeof(P1S));
   memset(P1E, 0, sizeof(P1E));
   int P2S[M+1][N+1], P2E[M+1][N+1];
   memset(P2S, 0, sizeof(P2S));
   memset(P2E, 0, sizeof(P2E));
   for (int i=1; i<=N; i++)
      for (int j=1; j<=M; j++)
         P1S[i][j] = max(P1S[i-1][j], P1S[i][j-1]) + A[i-1][j-1];
   for (int i=N; i>=1; i--)
      for (int j=M; j>=1; j--)
         P1E[i][j] = max(P1E[i+1][j], P1E[i][j+1]) + A[i-1][j-1];
   for (int i=N; i>=1; i--)
      for(int j=1; j<=M; j++)
         P2S[i][j] = max(P2S[i+1][j], P2S[i][j-1]) + A[i-1][j-1];
   for (int i=1; i<=N; i++)
      for (int j=M; j>=1; j--)
         P2E[i][j] = max(P2E[i-1][j], P2E[i][j+1]) + A[i-1][j-1];
   int ans = 0;
   for (int i=2; i<N; i++) {
      for (int j=2; j<M; j++) {
         int op1 = P1S[i][j-1] + P1E[i][j+1] + P2S[i+1][j] + P2E[i-1][j];
         int op2 = P1S[i-1][j] + P1E[i+1][j] + P2S[i][j-1] + P2E[i][j+1];
         ans = max(ans, max(op1, op2));
      }
   }
   return ans;
}
int main() {
   int A[][M] = {
      {100, 100, 100},
      {100, 1, 100},
      {100, 100, 100}
   };
   cout << "Max Points : " << findMaxPoints(A);
   return 0;
}

আউটপুট

Max Points : 800

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

  2. C++ এ দুটি অ্যারের ছেদ

  3. C++ এ একটি দলের সর্বোচ্চ কর্মক্ষমতা

  4. C++ এ একটি লাইনে সর্বোচ্চ পয়েন্ট