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

C++ में मैट्रिक्स में अधिकतम संख्या में 1s

मान लीजिए हमारे पास w x h आयामों का एक मैट्रिक्स M है, जैसे कि प्रत्येक सेल का मान 0 या 1 है, और M का आकार l x l का कोई भी वर्ग सब-मैट्रिक्स में अधिकतम maxOnes संख्या में 1s हैं। हमें मैट्रिक्स M में हो सकने वाले 1s की अधिकतम संभव संख्या ज्ञात करनी है।

तो, यदि इनपुट w = 3, h = 3, l = 2, maxOnes = 1 है, तो आउटपुट 4 होगा क्योंकि 3*3 मैट्रिक्स में, कोई 2*2 सब-मैट्रिक्स 1 से अधिक 1 नहीं रख सकता। 4 1s वाला सर्वोत्तम समाधान है:

101
000
101

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

  • ret := 0

  • आकार n x n का एक 2D ऐरे sq बनाएं

  • i := 0 से शुरू करें, जब i < height, अपडेट करें (i को 1 से बढ़ाएं), करें:

    • j := 0 से शुरू करें, जब j < width, अपडेट करें (j को 1 से बढ़ाएं), करें:

      • sq[i mod n, j mod n] को 1 से बढ़ाएं

  • एक ऐरे v परिभाषित करें

  • i := 0 से शुरू करें, जब i < n, अपडेट करें (i को 1 से बढ़ाएं), करें:

    • j := 0 से शुरू करें, जब j < n, अपडेट करें (j को 1 से बढ़ाएं), करें:

      • sq[i, j] को v के अंत में डालें

  • ऐरे v को रिवर्स ऑर्डर में सॉर्ट करें

  • i := 0, j := 0 से शुरू करें, जब i < v का आकार और j < maxOnes, अपडेट करें (i को 1 से बढ़ाएं), (j को 1 से बढ़ाएं), करें:

    • ret += v[i]

  • ret लौटाएं

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

उदाहरण

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int maximumNumberOfOnes(int width, int height, int n, int maxOnes) {
        int ret = 0;
        vector> sq(n, vector(n));
        for(int i = 0; i < height; i++) {
            for(int j = 0; j < width; j++) {
                sq[i % n][j % n]++;
            }
        }
        vector v;
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                v.push_back(sq[i][j]);
            }
        }
        sort(v.rbegin(), v.rend());
        for(int i = 0, j = 0; i < v.size() && j < maxOnes; i++, j++) {
            ret += v[i];
        }
        return ret;
    }
};

int main() {
    Solution ob;
    cout << (ob.maximumNumberOfOnes(3,3,2,1));
}

इनपुट

3, 3, 2, 1

आउटपुट

4
  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस

  1. - C++ में द्विभाजित ग्राफ में अधिकतम एज की संख्या

    समस्या कथन एक पूर्णांक N दिया गया है जो शीर्षों की संख्या दर्शाता है। कार्य N शीर्षों के द्विभाजित ग्राफ में संभव अधिकतम एज की संख्या ढूंढना है। द्विभाजित ग्राफ एक द्विभाजित ग्राफ वह है जिसमें शीर्षों के 2 सेट होते हैं। सेट ऐसे होते हैं कि एक ही सेट के शीर्ष कभी भी उनके बीच एज साझा नहीं करेंगे। उ