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

C++ प्रोग्राम में ऐरे में दूरी < K पर कोई दो तत्व न आने पर सब-सीक्वेंस के लिए अधिकतम संभव योग

समस्या विवरण

इस समस्या में, हमें आकार n का एक ऐरे arr[] और एक पूर्णांक k दिया गया है। हमारा कार्य ऐसा प्रोग्राम बनाना है जो ऐरे में दूरी < K पर कोई दो तत्व न आने पर सब-सीक्वेंस के लिए अधिकतम संभव योग ढूंढे।

समस्या विवरण - हमें सब-सीक्वेंस का अधिकतम योग ढूंढना है जो उन तत्वों पर विचार करता है जो एक दूसरे से k दूरी पर हैं।

उदाहरण

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

आउटपुट

16

व्याख्या

कम से कम k दूरी वाले तत्वों के सभी संभावित सब-सीक्वेंस:
{6, 1, 4}, योग = 11
{2, 9}, योग = 11
{5, 11}, योग = 16
{1, 4}, योग = 5
... अधिकतम योग = 16

हल करने का दृष्टिकोण

समस्या का एक हल डायनामिक प्रोग्रामिंग का उपयोग करना है। हल के लिए, हम ऐरे के वर्तमान तत्व तक अधिकतम संभव योग ढूंढेंगे। और इसे DP[i] में संग्रहीत करेंगे, इसके लिए हम अधिकतम संभव योग ढूंढेंगे। i-वें इंडेक्स के लिए, हमें जांचना होगा कि वर्तमान इंडेक्स मान जोड़ने से सब-सीक्वेंस योग बढ़ता है या नहीं।

if( DP[i - (k+1)] + arr[i] > DP[i - 1] ) -> DP[i] = DP[i - (k+1)] + arr[i] otherwise DP[i] = DP[i-1]

डायनामिक ऐरे का अधिकतम तत्व अधिकतम सबसीक्वेंस योग देता है।

एल्गोरिदम

  1. आरंभीकरण - maxSumSubSeq = -1, maxSumDP[n]
  2. चरण 1 - maxSumDP[0] = arr[0] आरंभ करें
  3. चरण 2 - i -> 1 से n तक लूप
    • चरण 2.1 - यदि i < k -> maxSumDP[i] = max(arr[i], maxSumDP[i-1])
    • चरण 2.2 - अन्यथा, maxSumDP[i] = max(arr[i], maxSumDP[i - (k+1)] + arr[i])
  4. चरण 3 - maxSumDP के सभी तत्वों से अधिकतम मान ढूंढें और maxSumSubSeq में संग्रहीत करें
  5. चरण 4 - maxSumSubSeq वापस करें

उदाहरण

#include <iostream>
using namespace std;

int retMaxVal(int a, int b) {
    if (a > b) return a;
    return b;
}

int calcMaxSumSubSeq(int arr[], int k, int n) {
    int maxSumDP[n];
    int maxSum = -1;
    maxSumDP[0] = arr[0];
    for (int i = 1; i < n; i++) {
        if (i < k) {
            maxSumDP[i] = retMaxVal(arr[i], maxSumDP[i - 1]);
        } else {
            maxSumDP[i] = retMaxVal(arr[i], maxSumDP[i - (k + 1)] + arr[i]);
        }
    }
    for (int i = 0; i < n; i++)
        maxSum = retMaxVal(maxSumDP[i], maxSum);
    return maxSum;
}

int main() {
    int arr[] = {6, 2, 5, 1, 9, 11, 4};
    int n = sizeof(arr) / sizeof(arr[0]);
    int k = 2;
    cout << "The maximum sum possible for a sub-sequence such that no two elements appear at a distance < " << k << " in the array is " << calcMaxSumSubSeq(arr, k, n);
    return 0;
}

आउटपुट

The maximum sum possible for a sub-sequence such that no two elements appear at a distance < 2 in the array is 16
  1. C++ प्रोग्राम में बाइनरी ट्री में अधिकतम उप-ट्री योग जैसे कि उप-ट्री BST भी हो C++ प्रोग्राम में बाइनरी ट्री में अधिकतम उप-ट्री योग जैसे कि उप-ट्री BST भी हो

    इस समस्या में, हमें एक बाइनरी ट्री BT दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो बाइनरी ट्री में अधिकतम उप-ट्री योग ढूंढे जैसे कि उप-ट्री भी एक BST हो। बाइनरी ट्री में एक विशेष शर्त होती है कि प्रत्येक नोड के अधिकतम दो बच्चे हो सकते हैं। बाइनरी सर्च ट्री एक ट्री है जिसमें सभी नोड्स नीचे उ

  1. सर्कुलर ऐरे में अधिकतम योग जहाँ कोई दो आसन्न तत्व न हों - C++ सर्कुलर ऐरे में अधिकतम योग जहाँ कोई दो आसन्न तत्व न हों - C++

    इस समस्या में, हमें एक सर्कुलर ऐरे cirArr[] दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में सर्कुलर ऐरे में अधिकतम योग ढूंढे जहाँ कोई दो आसन्न तत्व न हों।समस्या विवरणसर्कुलर ऐरे के लिए, हमें ऐरे के तत्वों का अधिकतम योग ढूंढना है जहाँ आसन्न तत्वों को नहीं लिया जा सकता, यानी हमें वैकल्पिक तत

  1. C++ में सरणी के एलिमेंट्स का गुणनफल C++ में सरणी के एलिमेंट्स का गुणनफल

    पूर्णांक एलिमेंट्स की एक सरणी दी गई है और कार्य सरणी के एलिमेंट्स को गुणा करना और प्रदर्शित करना है। उदाहरण इनपुट-: arr[]={1,2,3,4,5,6,7} आउटपुट-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 इनपुट-: arr[]={3, 4,6, 2, 7, 8, 4} आउटपुट-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 नीचे दिए गए प्रोग्राम में उपयोग किया गया द