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

C++ प्रोग्राम में अधिकतम योग वैकल्पिक उपअनुक्रम


इस समस्या में, हमें n पूर्णांकों की एक सरणी arr[] दी गई है। हमारा कार्य एक प्रोग्राम बनाना है जो सरणी के पहले तत्व से शुरू होने वाले अधिकतम योग वैकल्पिक उपअनुक्रम को ढूंढे।

एक वैकल्पिक उपअनुक्रम वह उपअनुक्रम है जिसमें तत्व बारी-बारी से बढ़ते और घटते क्रम में होते हैं यानी पहले घटता है, फिर बढ़ता है, फिर घटता है। यहां, रिवर्स वैकल्पिक उपअनुक्रम अधिकतम योग ढूंढने के लिए मान्य नहीं है।

उदाहरण

इनपुट

arr[] = {5, 1, 6, 2, 4, 8, 9}

आउटपुट

27

व्याख्या

शुरुआती तत्व: 5, घटाव: 1, वृद्धि: 6, घटाव: 2, वृद्धि: 4, N.A. 
यहां, हम उपअनुक्रम के अंतिम तत्व के रूप में 4, 8, 9 का उपयोग कर सकते हैं। 
योग = 5 + 1 + 6 + 2 + 4 + 9 = 27

समाधान दृष्टिकोण

समस्या को हल करने के लिए, हम डायनामिक प्रोग्रामिंग दृष्टिकोण का उपयोग करेंगे। इसके लिए, हम दो सरणियों का उपयोग करेंगे: एक उन तत्वों के अधिकतम योग को संग्रहीत करने के लिए जो arr[i] के साथ समाप्त होते हैं, जहां arr[i] बढ़ रहा है। दूसरी उन तत्वों के अधिकतम योग को संग्रहीत करने के लिए जो arr[i] के साथ समाप्त होते हैं, जहां arr[i] घट रहा है।

फिर हम तत्वों को एक-एक करके जोड़ेंगे और जांचेंगे कि क्या वे वैकल्पिक उपअनुक्रम हैं। प्रत्येक सरणी के लिए, हम सूचकांक तक अधिकतम योग की गणना करेंगे। और n तत्वों को पार करने के बाद अधिकतम मान वापस करेंगे।

उदाहरण

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम,

#include<iostream> 
#include<cstring> 
using namespace std; 

int maxVal(int x, int y){ 
    if(x > y) 
        return x; 
    return y; 
} 

int calcMaxSumAltSubSeq(int arr[], int n) { 
    int maxSum = -10000; 
    int maxSumDec[n]; 
    bool isInc = false; 
    memset(maxSumDec, 0, sizeof(maxSumDec)); 
    int maxSumInc[n]; 
    memset(maxSumInc, 0, sizeof(maxSumInc)); 
    maxSumDec[0] = maxSumInc[0] = arr[0]; 
    
    for (int i=1; i arr[i]) { 
                maxSumDec[i] = maxVal(maxSumDec[i], 
                maxSumInc[j]+arr[i]); 
                isInc = true; 
            } 
            else if (arr[j] < arr[i] && isInc) 
                maxSumInc[i] = maxVal(maxSumInc[i], 
                maxSumDec[j]+arr[i]); 
        } 
    } 
    
    for (int i = 0 ; i < n; i++) 
        maxSum = maxVal(maxSum, maxVal(maxSumInc[i], maxSumDec[i])); 
    
    return maxSum; 
} 

int main() { 
    int arr[]= {8, 2, 3, 5, 7, 9, 10}; 
    int n = sizeof(arr)/sizeof(arr[0]); 
    cout<<"The maximum sum alternating subsequence starting is "<<calcMaxSumAltSubSeq(arr , n); 
    return 0; 
}

आउटपुट

The maximum sum alternating subsequence starting is 25
  1. - C++ में ऐरे में अधिकतम ट्रिपलेट सम

    इस समस्या में, हमें एक ऐरे दिया गया है। हमारा कार्य एक ऐसा प्रोग्राम बनाना है जो ऐरे में अधिकतम ट्रिपलेट सम ढूंढे यानी तीन एलिमेंट्स का समूह ढूंढे जिसका योग अधिकतम हो।समस्या को समझने के लिए एक उदाहरण लेते हैं,इनपुट − array = {4, 6, 1, 2}आउटपुट − 12व्याख्या −सभी ट्रिपलेट्स हैं : (4,

  1. - C++ में अधिकतम उपसरणी योग मॉड्यूलो m (Maximum subarray sum modulo m)

    इस समस्या में, हमें आकार n की एक सरणी और एक पूर्णांक m दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में अधिकतम उपसरणी योग मॉड्यूलो m ढूंढे। प्रोग्राम विवरण - यहां, हम उपसरणी के सभी तत्वों के योग को m से विभाजित करके प्राप्त अधिकतम मान ढूंढेंगे। आइए एक उदाहरण से समझते हैं: इनपुट - सरणी = {4

  1. - C++ में ऐरे में अधिकतम संतुलन योग

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