Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

के को खोजने के लिए कार्यक्रम जहां दिए गए मैट्रिक्स में सी ++ में समान मूल्य के के द्वारा के वर्ग है

मान लीजिए कि हमारे पास 2d मैट्रिक्स है, हमें सबसे बड़ा k × k सबमैट्रिक्स खोजना है, जहां इसके सभी तत्वों का मान समान है, तो k का मान ज्ञात करें।

तो, अगर इनपुट पसंद है

1 1 8 3
1 5 5 5
2 5 5 5
4 5 5 5

तो आउटपुट 3 होगा, क्योंकि मान 5 का 3 × 3 वर्ग मैट्रिक्स है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • n :=मैट्रिक्स की पंक्ति गणना

  • मी :=मैट्रिक्स की कॉलम संख्या

  • एक 2D सरणी dp आकार (n x m) परिभाषित करें और 1

    . से भरें
  • रिट :=1

  • इनिशियलाइज़ करने के लिए i :=n-1, जब i>=0, अपडेट करें (i से 1 घटाएं), −

    करें
    • प्रारंभ करने के लिए j :=m-1, जब j>=0, अद्यतन करें (j को 1 से घटाएं), करें -

      • वैल:=inf

      • यदि i + 1

        • वैल:=न्यूनतम डीपी[i + 1, j] और वैल

      • अन्यथा

        • वैल:=0

      • यदि j + 1

        • वैल:=न्यूनतम डीपी[i, j + 1] और वैल

      • अन्यथा

        • वैल:=0

      • यदि i + 1

        • वैल:=न्यूनतम डीपी[i + 1, j + 1] और वैल

      • अन्यथा

        • वैल:=0

      • अगर वैल inf के समान है, तो -

        • निम्नलिखित भाग पर ध्यान न दें, अगले पुनरावृत्ति पर जाएं

      • डीपी [आई, जे]:=डीपी [आई, जे] + वैल

        • रिट :=अधिकतम रिट और डीपी[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++ प्रोग्राम किसी वर्ण का ASCII मान ज्ञात करने के लिए

    ASCII (अमेरिकन स्टैंडर्ड कोड फॉर इंफॉर्मेशन इंटरचेंज) टेबल में 128 कैरेक्टर हैं, जिनका मान 0 से 127 तक है। विभिन्न वर्णों के कुछ ASCII मान इस प्रकार हैं - चरित्र ASCII Value A 65 a 97 Z 90 z 122 $ 36 & 38 ? 63 एक प्रोग्राम जो किसी कैरेक्टर का ASCII मान ढूंढता है, वह इस प्रकार दिया जाता

  1. पायथन में दिए गए मैट्रिक्स में 1s के सबसे बड़े वर्ग का क्षेत्रफल ज्ञात करने का कार्यक्रम

    मान लीजिए हमारे पास एक बाइनरी मैट्रिक्स है, हमें उस दिए गए मैट्रिक्स में 1s का सबसे बड़ा वर्ग खोजना होगा। तो, अगर इनपुट पसंद है 1 0 0 0 0 1 1 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0

  1. पायथन में दिए गए मैट्रिक्स या नहीं के अंदर लक्ष्य मान खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक 2D मैट्रिक्स है, जहां प्रत्येक पंक्ति और स्तंभ को गैर-घटते क्रम में क्रमबद्ध किया गया है, हमें यह जांचना होगा कि दिया गया लक्ष्य उसके अंदर मौजूद है या नहीं। तो, अगर इनपुट पसंद है 2 4 30 3 4 31 6 6 32 और टारगेट =31, तो आउटपुट ट्रू होगा इसे हल करने के लिए, हम इन चरणों