बाइनरी ऐरे को देखते हुए गिरफ्तारी[] और दो चर a और b कुछ प्रारंभिक मूल्यों के साथ। सरणी में एक तत्व को पार करने के लिए arr[] दो तरीके हैं -
-
अगर arr[i] ==1, तो a . से 1 इकाई का उपयोग किया जा सकता है , b . में बिना किसी परिवर्तन के . यदि b . से 1 इकाई का उपयोग किया जाता है , तो a 1 इकाई से बढ़ जाता है। (ध्यान दें कि a के मान को उसके मूल मान से ऊपर नहीं बढ़ाया जा सकता है।)
-
अगर arr[i] ==0, तो a . से 1 इकाई का उपयोग किया जा सकता है या b ।
आइए अब एक उदाहरण का उपयोग करके समझते हैं कि हमें क्या करना है -
इनपुट
arr[] = {0, 0, 0, 1, 1}, a = 2, b = 2
आउटपुट
5
स्पष्टीकरण
1 सेंट . पार करने के लिए तत्व, a . से 1 इकाई का उपयोग करें (ए =1, बी =2)।
2 nd . को पार करने के लिए तत्व, a . से 1 इकाई का उपयोग करें (ए =0, बी =2)।
3 तीसरे . को पार करने के लिए तत्व, b . से 1 इकाई का उपयोग करें (ए =0, बी =1)।
4 वें . को पार करने के लिए तत्व, b . से 1 इकाई का उपयोग करें जो a . को बढ़ाता है 1 इकाई द्वारा (a =1, b =0)।
5 वें . को पार करने के लिए तत्व, a . से 1 इकाई का उपयोग करें (ए =0, बी =0)।
इसलिए, हमने सभी तत्वों को पार कर लिया और आउटपुट 5 हो गया।
इनपुट
arr[] = {1, 1, 1, 0, 1}, a = 1, b = 2
आउटपुट
4
निम्नलिखित कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है
-
फ़ंक्शन में MaxElements() वैरिएबल को इनिशियलाइज़ करें Oa =0 और अधिकतम =0, दोनों प्रकार के int क्रमशः a के मूल मान और अंतिम उत्तर को संग्रहीत करने के लिए।
-
सरणी में प्रत्येक तत्व की जांच करने के लिए i =0 से i<आकार तक लूप करें।
-
पहले जांचें कि क्या दोनों a और ख शून्य के बराबर हैं, फिर लूप से बाहर निकलें।
-
और जांचें कि क्या (ए ==0) और यदि ऐसा है, तो जांचें कि वर्तमान तत्व =1 है और उस तत्व को पार करने के लिए बी से 1 घटाएं और ए =मिनट (ओए, ए + 1) डालें ताकि ए अपने मूल से अधिक न हो मूल्य।
अन्यथा केवल a को प्रभावित किए बिना b से 1 घटाएं।
-
और जांचें कि क्या (बी ==0) और यदि ऐसा है, तो बस 1 से घटाएं।
-
और जांचें कि क्या (arr[i] ==1 &&a
-
अन्यथा केवल 1 से घटाएं और अधिकतम increment बढ़ाएं ।
-
लूप के बाहर, अधिकतम return लौटाएं ।
उदाहरण
#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