কম্পিউটার

k খুঁজে বের করার প্রোগ্রাম যেখানে প্রদত্ত ম্যাট্রিক্সে C++ এ একই মানের k দ্বারা k বর্গ রয়েছে


ধরুন আমাদের একটি 2d ​​ম্যাট্রিক্স আছে, আমাদের সবচেয়ে বড় k × k সাবম্যাট্রিক্স খুঁজে বের করতে হবে যেখানে এর সমস্ত উপাদান একই মান ধারণ করে, তারপর k-এর মান খুঁজে বের করুন।

সুতরাং, যদি ইনপুট মত হয়

1 18 3
1 5 5 5
2 5 5 5
4 5 5 5

তাহলে আউটপুট হবে 3, কারণ 5 মানের একটি 3 × 3 বর্গ ম্যাট্রিক্স রয়েছে৷

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

  • n :=ম্যাট্রিক্সের সারি গণনা

  • m :=ম্যাট্রিক্সের কলাম সংখ্যা

  • আকারের একটি 2D অ্যারে ডিপি (n x m) সংজ্ঞায়িত করুন এবং 1

    দিয়ে পূরণ করুন
  • ret :=1

  • আরম্ভ করার জন্য i :=n - 1, যখন i>=0, আপডেট করুন (i 1 দ্বারা কম করুন), করুন −

    • j শুরু করার জন্য :=m - 1, যখন j>=0, আপডেট করুন (j 1 দ্বারা কম করুন), −

      • val :=inf

      • যদি i + 1

        • val :=সর্বনিম্ন dp[i + 1, j] এবং val

      • অন্যথায়

        • val :=0

      • যদি j + 1

        • val :=সর্বনিম্ন dp[i, j + 1] এবং val

      • অন্যথায়

        • val :=0

      • যদি i + 1

        • val :=সর্বনিম্ন dp[i + 1, j + 1] এবং val

      • অন্যথায়

        • val :=0

      • যদি val inf এর মত হয়, তাহলে −

        • নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান

      • dp[i, j] :=dp[i, j] + val

        • ret :=ret এবং dp[i, j]

          -এর সর্বোচ্চ
  • রিটার্ন রিটার্ন

উদাহরণ

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(vector<vector<int>>& v) {
      int n = v.size();
      int m = v[0].size();
      vector<vector<int>> dp(n, vector<int>(m, 1));
      int ret = 1;
      for (int i = n - 1; i >= 0; i--) {
         for (int j = m - 1; j >= 0; j--) {
            int val = INT_MAX;
            if (i + 1 < n && v[i + 1][j] == v[i][j]) {
               val = min(dp[i + 1][j], val);
            }
            else {
               val = 0;
            }
            if (j + 1 < m && v[i][j + 1] == v[i][j]) {
               val = min(dp[i][j + 1], val);
            }
            else {
               val = 0;
            }
            if (i + 1 < n && j + 1 < m && v[i + 1][j + 1] == v[i][j]) {
               val = min(dp[i + 1][j + 1], val);
            }
            else {
               val = 0;
            }
            if (val == INT_MAX)
               continue;
               dp[i][j] += val;
               ret = max(ret, dp[i][j]);
            }
         }
         return ret;
      }
};
int solve(vector<vector<int>>& matrix) {
   return (new Solution())->solve(matrix);
}
int main(){
   vector<vector<int>> matrix = {
      {1, 1, 8, 3},
      {1, 5, 5, 5},
      {2, 5, 5, 5},
      {4, 5, 5, 5}
   };
   cout << solve(matrix);
}

ইনপুট

{ {1, 1, 8, 3}, {1, 5, 5, 5}, {2, 5, 5, 5}, {4, 5, 5,
5} };

আউটপুট

3

  1. একটি ম্যাট্রিক্সের স্থানান্তর খুঁজে পেতে C++ প্রোগ্রাম

  2. একটি অক্ষরের ASCII মান খুঁজে পেতে C++ প্রোগ্রাম

  3. পাইথনে একটি প্রদত্ত ম্যাট্রিক্সে 1s এর বৃহত্তম বর্গক্ষেত্রের ক্ষেত্রফল বের করার প্রোগ্রাম

  4. প্রদত্ত ম্যাট্রিক্সের ভিতরে একটি লক্ষ্য মান খুঁজে বের করার প্রোগ্রাম বা পাইথনে নয়