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

विशिष्ट अंतर C++ प्रोग्राम के साथ जोड़े का अधिकतम योग


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

समस्या का विवरण - हम युग्मों को इस प्रकार पाएंगे कि युग्मों के तत्वों का अंतर d से कम हो। ऐसे सभी जोड़ियों का योग अधिकतम होना चाहिए।

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

इनपुट

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

आउटपुट

47

स्पष्टीकरण

Pairs that contribute to maximum sum: (3, 5), (7, 9), (11, 12). Sum = 3 + 5 + 7 + 9 + 11 + 12 = 47

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

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

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

एल्गोरिदम

Initialize: DP[n]

चरण 1 -

For array arr[].

चरण 2

DP[0] = 0;

चरण 3 -

loop for i −> 1 to n

चरण 3.1 -

check if pairs with the previous element is possible. if(arr[i]
− arr[i−1] < d).

चरण 3.2 -

if Yes, check if the current pair sum results in a greater
value than the last considered sum and add the maximum value to the
current sum. i.e. 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 -

an exception is for value i = 1, where no value of DP[i−2] is
possible, in this case, DP[i−2] is not considered as it is the first pair
sum.

चरण 4 -

Return 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++ में दिए गए योग के साथ अधिकतम आकार का उपसमुच्चय

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

  1. C++ में दिए गए योग के साथ सभी जोड़ियों को प्रिंट करें

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

  1. अधिकतम योग के साथ पंक्तियों की एक विशिष्ट संख्या मुद्रित करने के लिए पायथन कार्यक्रम

    जब अधिकतम योग वाली पंक्तियों की एक विशिष्ट संख्या को प्रिंट करने की आवश्यकता होती है, तो क्रमबद्ध विधि और लैम्ब्डा विधि का उपयोग किया जाता है। उदाहरण नीचे उसी का एक प्रदर्शन है my_list = [[2, 4, 6, 7], [2, 4, 8], [45], [1, 3, 5, 6], [8, 2, 1]] print("The list is :") print(my_list) my_ke