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

अधिकतम अंक खोजें जो C++ में सरणी से तत्वों को हटाकर प्राप्त किया जा सकता है

अवधारणा

किसी दिए गए सरणी A के संबंध में N तत्व और दो पूर्णांक l और r हैं, जहाँ, 1≤ ​​ax ≤ 10 5 और 1≤ l≤ r≤ N. हम सरणी के किसी भी तत्व का चयन कर सकते हैं (मान लें ax) और इसे हटा दें, और ax के बराबर सभी तत्वों को भी हटा दें +1, एक<उप>x +2 ... ए<उप>x +R और ax -1, ए<उप>एक्स -2 … ए<उप>एक्स -एल सरणी से। इस कदम पर कुल्हाड़ी के अंक खर्च होंगे। हमारा काम सरणी से सभी तत्वों को हटाने के बाद कुल लागत को अधिकतम करना है।

इनपुट

2 1 2 3 2 2 1
l = 1, r = 1

आउटपुट

8

यहां, हम हटाने के लिए 2 चुनते हैं, फिर (2-1)=1 और (2+1)=3 को क्रमशः दिए गए l और r श्रेणी के लिए हटाना होगा।

इसे तब तक दोहराएं जब तक 2 पूरी तरह से निकल न जाए। तो, कुल लागत =2*4 =8.

इनपुट

2 4 2 10 5
l = 1, r = 2

आउटपुट

18

यहां, हम हटाने के लिए 2 चुनते हैं, फिर 5 और फिर 10.

तो कुल लागत =2*2 + 5 + 10 =19.

विधि

अब, हम सभी तत्वों की गिनती निर्धारित करेंगे। मान लें कि एक तत्व एक्स चुना गया है, तो श्रेणी [एक्स-एल, एक्स + आर] में एलीमेंट हटा दिए जाएंगे। वर्तमान में, हम भूमि r से न्यूनतम सीमा चुनते हैं और यह निर्धारित करते हैं कि तत्व X के चुने जाने पर किन तत्वों को हटाया जाना है। परिणाम पहले हटाए गए तत्वों में से अधिकतम होंगे और जब तत्व X हटा दिया जाएगा। अब, हम पहले से हटाए गए तत्वों के परिणाम को संग्रहीत करने और इसे आगे लागू करने के लिए गतिशील प्रोग्रामिंग लागू करेंगे।

उदाहरण

// C++ program to find maximum cost after
// deleting all the elements form the array
#include <bits/stdc++.h>
using namespace std;
// Shows function to return maximum cost obtained
int maxCost(int a[], int m, int L, int R){
   int mx1 = 0, k1;
   // Determine maximum element of the array.
   for (int p = 0; p < m; ++p)
      mx1 = max(mx1, a[p]);
   // Used to initialize count of all elements to zero.
   int count1[mx1 + 1];
   memset(count1, 0, sizeof(count1));
   // Compute frequency of all elements of array.
   for (int p = 0; p < m; p++)
      count1[a[p]]++;
   // Used to store cost of deleted elements.
   int res1[mx1 + 1];
   res1[0] = 0;
   // Choosing minimum range from L and R.
   L = min(L, R);
   for (int num1 = 1; num1 <= mx1; num1++) {
      // Determines upto which elements are to be
      // deleted when element num is selected.
      k1 = max(num1 - L - 1, 0);
      // Obtain maximum when selecting element num or not.
      res1[num1] = max(res1[num1 - 1], num1 * count1[num1] +
      res1[k1]);
   }
   return res1[mx1];
}
// Driver program
int main(){
   int a1[] = { 1, 1, 3, 3, 3, 2, 4 }, l1 = 1, r1 = 1;
   int a2[] = { 2, 4, 2, 10, 5 }, l2 = 1, r2 = 2;
   // size of array
   int n1 = sizeof(a1) / sizeof(a1[0]);
   int n2 = sizeof(a2) / sizeof(a2[0]);
   // function call to find maximum cost
   cout<<"Maximum Cost for First Example:" << maxCost(a1, n1, l1,r1)<<endl;
   cout<<"Maximum Cost for Second Example:" << maxCost(a2, n2, l2,r2);
   return 0;
}

आउटपुट

Maximum Cost for First Example:11
Maximum Cost for Second Example:19

  1. अधिकतम दर्पण जो C++ में प्रकाश को नीचे से दाएं स्थानांतरित कर सकते हैं

    हमें एक वर्ग मैट्रिक्स दिया गया है जिसमें केवल 0 और 1 हैं। 0 एक खाली खाली जगह का प्रतिनिधित्व करता है और 1 का मतलब बाधा है। हमें ऐसे कई दर्पण खोजने होंगे, जिनमें अटेम्प्टी सेल इस प्रकार रखे जा सकें कि ये दर्पण नीचे से दाईं ओर प्रकाश स्थानांतरित कर सकें। यह तब संभव है, जब मिरर को इंडेक्स [i,j] पर रखा

  1. C++ में दिए गए सरणी के तत्वों के भाज्य का GCD ज्ञात कीजिए

    मान लीजिए कि हमारे पास एन तत्वों के साथ एक सरणी ए है। हमें सरणी के सभी तत्वों के भाज्य का GCD ज्ञात करना है। मान लीजिए कि तत्व {3, 4, 8, 6} हैं, तो भाज्य का GCD 6 है। यहाँ हम ट्रिक देखेंगे। चूँकि दो संख्याओं का GCD वह सबसे बड़ी संख्या है, जो दोनों संख्याओं को विभाजित करती है, तो दो संख्याओं के भाज्य

  1. पायथन में सरणी से तत्वों को हटाकर प्राप्त किए जा सकने वाले अधिकतम अंक प्राप्त करें

    मान लीजिए कि हमारे पास N तत्वों के साथ एक सरणी A है, हमारे पास दो पूर्णांक l और r भी हैं, जहां 1≤ ax 10^5 और 1≤ l≤ r≤ N. एक तत्व लेना सरणी से कुल्हाड़ी कहें और इसे हटा दें, और उस सरणी से ax+1, ax+2 … ax+R और ax-1, ax-2 … ax-L के बराबर सभी तत्वों को भी हटा दें। ऐसा करने से कुल्हाड़ी के अंक खर्च होंगे