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

C++ में अधिकतम K सरणी तत्वों के संकेतों को फ़्लिप करके अधिकतम सबअरे योग


इस समस्या में, हमें एक सरणी और एक पूर्णांक k दिया जाता है। हमारा कार्य एक ऐसा प्रोग्राम बनाना है जो C++ में अधिकतम k सरणी तत्वों के चिह्नों को फ़्लिप करके अधिकतम सबअरे योग प्राप्त करेगा।

कोड विवरण - यहां, हमें सरणी में फ़्लिप करने के लिए अधिक से अधिक k तत्वों को खोजना होगा जो इस सरणी से बनाए गए सबअरे के योग को अधिकतम बना देगा।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट - सरणी ={1, -2, 7, 0} k =2

आउटपुट -10

स्पष्टीकरण - हम केवल एक तत्व फ्लिप करेंगे जो -2 है, यह सरणी योग 10 बनाता है जो अधिकतम संभव है।

इस समस्या को हल करने के लिए, हम गतिशील प्रोग्रामिंग दृष्टिकोण का उपयोग करेंगे जो i th से सरणी का अधिकतम संभव योग प्राप्त करेगा। सूचकांक से j वें अनुक्रमणिका और इसे एक सरणी maxSumij [i] [j] में संग्रहीत करें और दोनों मामलों पर विचार करें यदि तत्व फ़्लिप किया गया है या तत्व फ्लिप के बिना यह सबसे अच्छा मामला लौटाएगा, यह फ़ंक्शन के लिए एक पुनरावर्ती कॉल का उपयोग करके किया जाएगा। अंत में, हम maxSumij[i][j] मैट्रिक्स से अधिकतम तत्व पाएंगे।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम,

#include <bits/stdc++.h>
using namespace std;
#define right 2
#define left 4
int arraySumij[left][right];
int findSubarraySum(int i, int flips, int n, int a[], int k){
   if (flips > k)
      return -1e9;
   if (i == n)
      return 0;
   if (arraySumij[i][flips] != -1)
      return arraySumij[i][flips];
   int maxSum = 0;
   maxSum = max(0, a[i] + findSubarraySum(i + 1, flips, n, a, k));
   maxSum = max(maxSum, -a[i] + findSubarraySum(i + 1, flips + 1, n, a, k));
   arraySumij[i][flips] = maxSum;
   return maxSum;
}
int maxSubarraySumFlip(int a[], int n, int k){
   memset(arraySumij, -1, sizeof(arraySumij));
   int maxSum = -100;
   for (int i = 0; i < n; i++)
      maxSum = max(maxSum, findSubarraySum(i, 0, n, a, k));
   return maxSum;
}
int main() {
   int a[] = {-3, 56, -1, 8};
   int n = sizeof(a) / sizeof(a[0]);
   int k = 2;
   cout<<"Maximum subarry sum by fipping signs of at most "<<k<<" element is "<<maxSubarraySumFlip(a, n, k);
   return 0;
}

आउटपुट

Maximum subarry sum by fipping signs of at most 2 element is 66

  1. C++ में दिए गए सरणी k बार दोहराकर बनाई गई सरणी में अधिकतम सबअरे योग

    इस समस्या में, हमें एक सरणी और एक संख्या k दी जाती है। हमारा काम एक प्रोग्राम बनाना है जो दिए गए सरणी k समय को c ++ में दोहराकर बनाई गई सरणी में अधिकतम सबएरे योग ढूंढेगा। समस्या का विवरण - यहां, हम दिए गए एरे को k बार दोहराकर बनने वाले एरे से बनने वाले सबअरे का अधिकतम योग पाएंगे। समस्या को समझने क

  1. सी ++ में अधिकतम दो तत्वों को बदलने के बाद अधिकतम सबरे योग

    इस समस्या में, हमें एक सरणी दी जाती है। हमारा काम एक ऐसा प्रोग्राम बनाना है जो C++ में अधिकतम दो तत्वों को उलटने के बाद अधिकतम सबएरे योग प्राप्त करेगा। समस्या का विवरण - यहां, हमें सबएरे को खोजना होगा जो कि एरे के किन्हीं दो नंबरों के चिन्ह को उलटने पर अधिकतम योग उत्पन्न करेगा। समस्या को समझने के

  1. सी ++ में एक सरणी में अधिकतम संतुलन योग

    समस्या कथन एक सरणी को देखते हुए []। उपसर्ग योग का अधिकतम मान ज्ञात करें जो कि गिरफ्तारी में अनुक्रमणिका i के लिए प्रत्यय योग भी है []। उदाहरण यदि इनपुट ऐरे है - Arr[] ={1, 2, 3, 5, 3, 2, 1} तो आउटपुट 11 है - उपसर्ग योग =गिरफ्तारी[0..3] =1 + 2 + 3 + 5 =11 और प्रत्यय योग =गिरफ्तारी[3..6] =5 + 3 +