একটি বাইনারি অ্যারে arr[] দেওয়া হয়েছে এবং দুটি ভেরিয়েবল a এবং b কিছু প্রাথমিক মান সহ। অ্যারে arr[] এ একটি উপাদান অতিক্রম করতে দুটি উপায় আছে -
-
যদি arr[i] ==1 হয়, তাহলে a থেকে 1 ইউনিট ব্যবহার করা যেতে পারে , b-এ কোনো পরিবর্তন ছাড়াই . যদি b থেকে 1 ইউনিট ব্যবহার করা হয় , তারপর 1 ইউনিট বৃদ্ধি পায়। (উল্লেখ্য যে a এর মান তার মূল মানের উপরে বাড়ানো যাবে না।)
-
যদি arr[i] ==0 হয়, তাহলে a থেকে 1 ইউনিট ব্যবহার করা যেতে পারে অথবা b .
আসুন এখন বুঝতে পারি −
একটি উদাহরণ ব্যবহার করে আমাদের কী করতে হবেইনপুট
arr[] = {0, 0, 0, 1, 1}, a = 2, b = 2
আউটপুট
5
ব্যাখ্যা
1 st অতিক্রম করতে উপাদান, a থেকে 1 ইউনিট ব্যবহার করুন (a =1, b =2)।
2 nd অতিক্রম করতে উপাদান, a থেকে 1 ইউনিট ব্যবহার করুন (a =0, b =2)।
3 rd অতিক্রম করতে উপাদান, b থেকে 1 ইউনিট ব্যবহার করুন (a =0, b =1)।
4 th অতিক্রম করতে উপাদান, b থেকে 1 ইউনিট ব্যবহার করুন যা a বৃদ্ধি করে 1 ইউনিট দ্বারা (a =1, b =0)।
5 th অতিক্রম করতে উপাদান, a থেকে 1 ইউনিট ব্যবহার করুন (a =0, b =0)।
অতএব, আমরা সমস্ত উপাদান অতিক্রম করি এবং আউটপুট 5 হয়।
ইনপুট
arr[] = {1, 1, 1, 0, 1}, a = 1, b = 2
আউটপুট
4
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
ফাংশনে MaxElements() ভেরিয়েবল শুরু করে Oa =0 এবং সর্বোচ্চ =0, যথাক্রমে a এবং চূড়ান্ত উত্তরের মূল মান সংরক্ষণ করতে int উভয় প্রকার।
-
অ্যারের প্রতিটি উপাদান পরীক্ষা করতে i =0 থেকে i
-
প্রথমে চেক করুন উভয়ই a কিনা এবং b শূন্যের সমান, তারপর লুপ থেকে বেরিয়ে আসুন।
-
অন্যথায় পরীক্ষা করুন যদি (a ==0) এবং যদি তাই হয়, তারপর পরীক্ষা করুন বর্তমান উপাদান =1 এবং সেই উপাদানটি অতিক্রম করতে b থেকে 1 বিয়োগ করুন এবং a =min(Oa, a + 1) রাখুন যাতে a তার আসলটির চেয়ে বেশি না হয় মান।
অন্যথায় a কে প্রভাবিত না করে b থেকে 1 বিয়োগ করুন।
-
অন্যথায় পরীক্ষা করুন যদি (b ==0) এবং যদি তাই হয়, তাহলে কেবল a থেকে 1 বিয়োগ করুন।
-
অন্যথায় পরীক্ষা করুন যদি (arr[i] ==1 &&a
-
অন্যথায় a থেকে 1 বিয়োগ করুন এবং সর্বোচ্চ বৃদ্ধি করুন .
-
লুপের বাইরে, সর্বোচ্চ ফিরুন .
উদাহরণ
#include <bits/stdc++.h> using namespace std; int MaxElements(int arr[], int a, int b, int size){ // Oa will have original value of a int Oa = a; int max = 0; // Iterate in the binary array for (int i = 0; i < size; i++){ // Break loop if a and b, both are = 0 if (a == 0 && b == 0) break; // If a is not present, use b else if (a == 0){ //increase a by 1 if arr[i] == 1 if (arr[i] == 1){ b -= 1; //Checking if original value is not exceeded a = min(Oa, a + 1); } else b -= 1; } // If b is not present, use a else if (b == 0) a--; // if arr[i] == 1,use b else if (arr[i] == 1 && a < Oa){ b -= 1; a = min(Oa, a + 1); } else a--; max++; } return max; } //main function int main(){ int arr[] = { 1, 1, 1, 0, 1 }; int size = sizeof(arr) / sizeof(arr[0]); int a = 1; int b = 2; cout << MaxElements(arr, a, b, size); return 0; }
আউটপুট
4