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

C++ प्रोग्राम किसी भी बीजगणितीय अभिव्यक्ति का न्यूनतम मान खोजने के लिए


यह किसी भी बीजगणितीय अभिव्यक्ति का न्यूनतम मान खोजने के लिए एक C++ प्रोग्राम है। (x1 + x2 + ... + xa) * (y1 + y2 + ... + yb) रूप का एक बीजगणितीय अभिव्यक्ति और (a + b) इंटीजर्स दिए गए हैं। a नंबर्स और शेष b नंबर्स के सभी संभावित संयोजनों पर विचार करें और उनके मानों की गणना करें, जिससे न्यूनतम मान प्राप्त किया जा सके।

एल्गोरिदम

  1. ऐरे एलिमेंट्स का योग ढूंढें।
  2. इंटीजर्स को 25 से शिफ्ट करें ताकि वे पॉजिटिव हो जाएं।
  3. बूलियन ऐरे dp[i][j] घोषित करें जो दर्शाता है कि j योग i नंबर्स चुनकर पहुंच योग्य है।
  4. ऐरे इनिशियलाइज़ करें।
  5. सभी संभावित योगों के लिए DP भरें।
  6. न्यूनतम मान खोजें: min(tmp * (sum - tmp)) जहां tmp पहुंच योग्य योग है।

C++ कार्यान्वयन

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

#define INF 1e9
#define MAX 25

int MinValue(int a[], int x, int y) {
    int sum = 0;
    for (int i = 0; i < (x + y); i++) {
        sum += a[i];
        a[i] += 25;
    }
    
    bool dp[MAX+1][MAX * MAX + 1];
    memset(dp, 0, sizeof(dp));
    dp[0][0] = 1;
    
    for (int i = 0; i < (x + y); i++) {
        for (int k = min(x, i + 1); k >= 1; k--) {
            for (int j = 0; j < MAX * MAX + 1; j++) {
                if (dp[k-1][j])
                    dp[k][j + a[i]] = 1;
            }
        }
    }
    
    int min_val = INF;
    for (int i = 0; i < MAX * MAX + 1; i++) {
        if (dp[x][i]) {
            int tmp = i - 25 * x;
            min_val = min(min_val, tmp * (sum - tmp));
        }
    }
    cout << "Minimum Value: " << min_val;
    return min_val;
}

int main() {
    int x = 2, y = 2;
    int ar[] = {7, 6, 4, 3};
    MinValue(ar, x, y);
    return 0;
}

आउटपुट

Minimum Value: 91

व्याख्या

अभिव्यक्ति: (x1 + x2) * (y1 + y2) जहां 4 नंबर {7,6,4,3} हैं।
संभावित विभाजन: (7+6)*(4+3) = 13*7 = 91 ← न्यूनतम
(7+4)*(6+3) = 11*9 = 99
(7+3)*(6+4) = 10*10 = 100

  1. C++ में कार्टेशियन निर्देशांकों को जोड़ने की न्यूनतम लागत ज्ञात करने का प्रोग्राम C++ में कार्टेशियन निर्देशांकों को जोड़ने की न्यूनतम लागत ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास 2D कार्टेशियन निर्देशांक बिंदुओं (x, y) की एक सूची है। हम (x0, y0) और (x1, y1) को जोड़ सकते हैं, जिसकी लागत |x0 - x1| + |y0 - y1| है। यदि हमें किसी भी संख्या में बिंदुओं को जोड़ने की अनुमति है, तो हमें वह न्यूनतम लागत ज्ञात करनी होगी जिससे हर बिंदु एक पथ से जुड़ा हो।उदाहरण के लिए

  1. - C++ में कम्युनिकेशन टावर्स में न्यूनतम समूहों की संख्या

    मान लीजिए हमारे पास एक 2D बाइनरी मैट्रिक्स है जहां 1 एक कम्युनिकेशन टावर को दर्शाता है, और 0 एक खाली सेल को दर्शाता है। टावर निम्न तरीकों से संवाद कर सकते हैं: यदि टावर A और टावर B एक ही पंक्ति या कॉलम पर हैं, तो वे एक-दूसरे से संवाद कर सकते हैं। यदि टावर A, टावर B से बात कर सकता है और B, C से बात

  1. C++ में बाइनरी ट्री के उस स्तर को खोजें जिसका योग न्यूनतम है C++ में बाइनरी ट्री के उस स्तर को खोजें जिसका योग न्यूनतम है

    एक बाइनरी ट्री दिया गया है जहां रूट का स्तर 1 है। हमें वह सबसे छोटा स्तर X ढूंढना है जहां सभी नोड्स के मानों का योग न्यूनतम हो। उदाहरण ट्री में रूट 5 है, बाएं 4, दाएं -10, आदि। स्तर 2 का योग 4 + (-10) = -6 है, जो न्यूनतम है, इसलिए आउटपुट 2 है। समाधान दृष्टिकोण हम लेवल ऑर्डर ट्रैवर्सल (BFS) का उपयोग