यह किसी भी बीजगणितीय अभिव्यक्ति का न्यूनतम मान खोजने के लिए एक C++ प्रोग्राम है। (x1 + x2 + ... + xa) * (y1 + y2 + ... + yb) रूप का एक बीजगणितीय अभिव्यक्ति और (a + b) इंटीजर्स दिए गए हैं। a नंबर्स और शेष b नंबर्स के सभी संभावित संयोजनों पर विचार करें और उनके मानों की गणना करें, जिससे न्यूनतम मान प्राप्त किया जा सके।
एल्गोरिदम
- ऐरे एलिमेंट्स का योग ढूंढें।
- इंटीजर्स को 25 से शिफ्ट करें ताकि वे पॉजिटिव हो जाएं।
- बूलियन ऐरे
dp[i][j]घोषित करें जो दर्शाता है कि j योग i नंबर्स चुनकर पहुंच योग्य है। - ऐरे इनिशियलाइज़ करें।
- सभी संभावित योगों के लिए DP भरें।
- न्यूनतम मान खोजें:
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