কম্পিউটার টিউটোরিয়াল

C++-এ বাইনারি ম্যাট্রিক্স K বার ফ্লিপ করে সর্বোচ্চ স্কোর (Maximum score after flipping a Binary Matrix atmost K times)

এই সমস্যায় একটি ২D অ্যারে arr[] (০ এবং ১) এবং পূর্ণসংখ্যা K দেওয়া আছে। আমাদের C++-এ বাইনারি ম্যাট্রিক্সสูচক K বার ফ্লিপ করে সর্বোচ্চ স্কোর বের করার প্রোগ্রাম লিখতে হবে।

সমস্যার বিবরণ - ২D অ্যারে এবং K মুভ দেওয়া আছে। প্রতিটি মুভে একটি সারি বা কলামের সব উপাদান ফ্লিপ করতে হবে (০→১, ১→০)। লক্ষ্য হল K মুভ পর প্রতিটি সারির বাইনারি সংখ্যা থেকে তৈরি মোট সংখ্যার যোগফল সর্বোচ্চ করা।

উদাহরণ:

ইনপুট

arr[][] = {{1, 0, 0}, {0, 1, 1}, {1, 0, 1}}, K = 2

আউটপুট

19

ব্যাখ্যা

প্রথম ফ্লিপ: ২য় সারি → {{1,0,0},{1,0,0},{1,0,1}}। দ্বিতীয় ফ্লিপ: ২য় কলাম → {{1,1,0},{1,1,0},{1,1,1}}। প্রতিটি সারির সংখ্যা: ৬, ৬, ৭। মোট = ১৯।

সমাধানের পদ্ধতি

প্রথম কলামের সব উপাদান ১ করা যাক (সর্বোচ্চ ওজন)। তারপর প্রতিটি কলামে ০ বেশি হলে সেটি ফ্লিপ করুন। ম্যাপ ডেটা স্ট্রাকচার ব্যবহার করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
const int row = 3;
const int col = 3;
int MaxSumAfterFlip(int mat[row][col], int K) {
    map<int, int> flipValues;
    int updateVal, MaxSum = 0;
    for (int i = 0; i < row; ++i) {
        if (mat[i][0] == 0) {
            updateVal = 0;
            for (int j = 1; j < col; ++j)
                updateVal = updateVal + mat[i][j] * pow(2, col - j - 1);
            flipValues[updateVal] = i;
        }
    }
    map<int, int>::iterator it = flipValues.begin();
    while (K > 0 && it != flipValues.end()) {
        int updateIndex = it->second;
        for (int j = 0; j < col; ++j)
            mat[updateIndex][j] = (mat[updateIndex][j] + 1) % 2;
        it++;
        K--;
    }
    MaxSum = 0;
    int zeros, ones = 0;
    for (int j = 0; j < col; ++j) {
        zeros = ones = 0;
        for (int i = 0; i < row; ++i) {
            mat[i][j] == 0 ? zeros++ : ones++;
        }
        if (K > 0 && zeros > ones) {
            MaxSum += zeros * pow(2, (col - j - 1));
            K--;
        }
        else
            MaxSum += ones * pow(2, (col - j - 1));
    }
    return MaxSum;
}
int main() {
    int mat[row][col] = {{1, 0, 0 },{0, 1, 1},{1, 0, 1}};
    int K = 2;
    cout<<"The Maximum score after flipping the matrix atmost K times is "<

আউটপুট

The Maximum score after flipping the matrix atmost K times is 19
  1. বাইনারি ম্যাট্রিক্স কে শূন্য ম্যাট্রিক্সে রূপান্তরের অপারেশন গণনা (C++ প্রোগ্রাম)

  2. বাইনারি ট্রিতে ভার্টিকাল সমের সর্বোচ্চ মান খুঁজে বের করা C++-তে

  3. সি++ প্রোগ্রাম: ম্যাট্রিক্সের প্রতিটি কলামের সর্বোচ্চ উপাদান নির্ণয়

  4. C++ ব্যবহার করে ম্যাট্রিক্সে সর্বোচ্চ যোগফল করা কলাম বের করা