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

C++ प्रोग्राम में विशिष्ट अंतर वाले युग्मों का अधिकतम योग


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

समस्या विवरण

हम ऐसे युग्म ढूंढेंगे जिनके तत्वों का अंतर d से कम हो। ऐसे सभी युग्मों का योग अधिकतम होना चाहिए।

उदाहरण

इनपुट

arr[] = {5, 9, 11, 7, 2, 12, 3} d = 5

आउटपुट

47

व्याख्या

अधिकतम योग में योगदान देने वाले युग्म: (3, 5), (7, 9), (11, 12)। योग = 3 + 5 + 7 + 9 + 11 + 12 = 47

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

समस्या का एक सरल और स्पष्ट समाधान सरणी के सभी मान्य युग्म बनाना और फिर योग ढूंढकर सभी योगों में से अधिकतम वापस करना है। लेकिन यह समाधान कुशल नहीं है।

समस्या का एक कुशल समाधान डायनामिक प्रोग्रामिंग दृष्टिकोण का उपयोग करना है। यहां, हम इष्टतम युग्म ढूंढेंगे जो अधिकतम योग बनाते हैं। इसके लिए हम क्रमबद्ध सरणी का उपयोग करेंगे, इसलिए पहले हम दी गई सरणी को क्रमबद्ध करेंगे और फिर उस पर काम करेंगे। योग ढूंढने के लिए, हम एक सरणी का उपयोग करेंगे जो वर्तमान तत्व तक युग्मों के अधिकतम योग को संग्रहीत करेगी। इसके लिए, हम जांचेंगे कि क्या वर्तमान तत्व और पिछला तत्व एक युग्म बनाते हैं। यदि हां, तो हम युग्म योग को सरणी के maxSum में जोड़ देंगे। अन्यथा, max sum वही रहेगा।

एल्गोरिदम

आरंभीकरण: DP[n]

चरण 1 -

सरणी arr[] के लिए।

चरण 2

DP[0] = 0;

चरण 3 -

लूप i → 1 से n तक

चरण 3.1 -

जांचें कि क्या पिछले तत्व के साथ युग्म संभव है। if(arr[i] - arr[i-1] < d)।

चरण 3.2 -

यदि हां, तो जांचें कि क्या वर्तमान युग्म योग अंतिम विचारित योग से अधिक मान देता है और अधिकतम मान को वर्तमान योग में जोड़ें। यानी if( (DP[i-2] + arr[i-1] + arr[i]) > (DP[i-1])) → DP[i] = (DP[i-2] + arr[i-1] + arr[i]), else → DP[i] = DP[i-1]।

चरण 3.3 -

i = 1 के मान के लिए एक अपवाद है, जहां DP[i-2] का कोई मान संभव नहीं है, इस मामले में, DP[i-2] पर विचार नहीं किया जाता क्योंकि यह पहला युग्म योग है।

चरण 4 -

DP[n-1] वापस करें।

उदाहरण

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

#include <bits/stdc++.h> 
using namespace std; 

int CalcmaxPairSum(int arr[], int n, int d) { 
    sort(arr, arr+n); 
    int maxSumDP[n]; 
    maxSumDP[0] = 0; 
    
    for (int i = 1; i < n; i++) { 
        maxSumDP[i] = maxSumDP[i-1]; 
        if (arr[i] - arr[i-1] < d) { 
            if (i >= 2) 
                if(maxSumDP[i] < (maxSumDP[i-2] + arr[i-1] + arr[i])) 
                    maxSumDP[i] = (maxSumDP[i-2] + arr[i-1] + arr[i]); 
            else 
                if(maxSumDP[i] < (arr[i-1] + arr[i])) 
                    maxSumDP[i] = arr[i-1] + arr[i]; 
        } 
    } 
    return maxSumDP[n-1]; 
} 

int main() { 
    int arr[] = {5, 9, 11, 7, 2, 12, 3}; 
    int n = 7, d = 5; 
    cout<<"The maximum sum of pairs with specific difference is "<<CalcmaxPairSum(arr, n, d); 
    return 0; 
}

आउटपुट

The maximum sum of pairs with specific difference is 47
  1. - C++ में दिए गए योग के साथ अधिकतम आकार का सबसेट

    समस्या कथनN तत्वों का एक एरे और योग दिया गया है। हमें उस अधिकतम आकार के सबसेट का आकार ढूंढना है जिसका योग दिए गए योग के बराबर हो।उदाहरणयदि इनपुट एरे arr = { 2, 3, 5, 10 } है और योग = 20 है तो आउटपुट 4 होगा क्योंकि −2 + 3 + 5 + 10 = 20 जो दिए गए योग के बराबर है।एल्गोरिदमहम इस समस्या को हल करने

  1. - C++ में दिए गए योग वाले सभी युग्म प्रिंट करें

    इस समस्या में, हमें पूर्णांकों की एक सरणी और एक पूर्णांक योग दिया गया है और हमें उन सभी पूर्णांक युग्मों को प्रिंट करना है जिनका योग योग मान के बराबर है। समस्या को समझने के लिए एक उदाहरण लेते हैं : इनपुट - सरणी = {1, 6, -2, 3} योग = 4 आउटपुट - (1, 3) , (6, -2) यहां, हमें दिए गए योग मान वाले युग्म चा

  1. - Python: मैट्रिक्स से अधिकतम योग वाली शीर्ष K पंक्तियाँ निकालना

    Python में नेस्टेड सूची (मैट्रिक्स) से पंक्तियों के योग की गणना करके, अधिकतम योग वाली शीर्ष K पंक्तियाँ निकालना। उदाहरण my_list = [[2, 4, 6, 7], [2, 4, 8], [45], [1, 3, 5, 6], [8, 2, 1]] print(मूल मैट्रिक्स:, my_list) my_key = 3 print(fशीर्ष K = {my_key} पंक्तियाँ) # विधि 1: sorted() + lambda (मू