ধরুন আমাদের কাছে একটি ম্যাট্রিক্স M আছে যার ডাইমেনশন w x h আছে, যেমন প্রতিটি কক্ষের মান 0 বা 1 আছে, এবং l x l আকারের M-এর যেকোনো বর্গক্ষেত্র সাব-ম্যাট্রিক্সে সর্বাধিক maxOnes সংখ্যা রয়েছে। আমাদের ম্যাট্রিক্স M এর সম্ভাব্য সর্বাধিক সম্ভাব্য সংখ্যা খুঁজে বের করতে হবে।
সুতরাং, ইনপুট যদি হয় w =3, h =3, l =2, maxOnes =1, তাহলে আউটপুট হবে 4 যেমন একটি 3*3 ম্যাট্রিক্সে, কোন 2*2 সাব-ম্যাট্রিক্সে 1 টির বেশি হতে পারে না . সর্বোত্তম সমাধান যার 4টি আছে তা হল −
1 | 0 | 1 |
0 | 0 | 0 |
1 | 0 | 1 |
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
ret :=0
-
n x n
আকারের একটি 2D অ্যারে বর্গ করুন -
আরম্ভ করার জন্য i :=0, যখন i <উচ্চতা, আপডেট (i 1 দ্বারা বাড়ান), করবেন −
-
j শুরু করার জন্য :=0, যখন j <প্রস্থ, আপডেট করুন (j 1 দ্বারা বৃদ্ধি করুন), করুন −
-
sq[i mod n, j mod n] 1 দ্বারা বাড়ান
-
-
-
একটি অ্যারে v
সংজ্ঞায়িত করুন -
আরম্ভ করার জন্য i :=0, যখন i
-
j শুরু করার জন্য :=0, যখন j
করুন -
v
এর শেষে sq[i, j] ঢোকান
-
-
-
অ্যারে v কে বিপরীত ক্রমে সাজান
-
আরম্ভ করার জন্য i :=0, j :=0, যখন i
-
রিটার্ন রিটার্ন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h> using namespace std; class Solution { public: int maximumNumberOfOnes(int width, int height, int n, int maxOnes) { int ret = 0; vector < vector <int> > sq(n, vector <int>(n)); for(int i = 0; i < height; i++){ for(int j = 0; j < width; j++){ sq[i % n][j % n]++; } } vector <int> 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; } }; main(){ Solution ob; cout << (ob.maximumNumberOfOnes(3,3,2,1)); }
ইনপুট
3, 3, 2, 1
আউটপুট
4