यह किसी भी बीजगणितीय अभिव्यक्ति का अधिकतम मान खोजने के लिए एक C++ प्रोग्राम है। (x1 + x2 + ... + xa) * (y1 + y2 + ... + yb) रूप का एक बीजगणितीय अभिव्यक्ति और (a + b) इंटीजर्स दिए गए हैं। a नंबर्स और शेष b नंबर्स के सभी संभावित संयोजनों पर विचार करें और उनके मानों की गणना करें, जिससे अधिकतम मान प्राप्त किया जा सके।
एल्गोरिदम
- ऐरे एलिमेंट्स का योग ढूंढें।
- इंटीजर्स को 25 से शिफ्ट करें ताकि वे पॉजिटिव हो जाएं।
- बूलियन ऐरे
dp[i][j]घोषित करें जो दर्शाता है कि j योग i नंबर्स चुनकर पहुंच योग्य है। - ऐरे इनिशियलाइज़ करें।
- सभी संभावित योगों के लिए DP भरें।
- अधिकतम मान खोजें:
max(tmp * (sum - tmp))जहांtmpपहुंच योग्य योग है।
C++ कार्यान्वयन
#include <bits/stdc++.h>
using namespace std;
#define INF 1e9
#define MAX 25
int MaxValue(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 max_val = -INF;
for (int i = 0; i < MAX * MAX + 1; i++) {
if (dp[x][i]) {
int tmp = i - 25 * x;
max_val = max(max_val, tmp * (sum - tmp));
}
}
cout << "Maximum Value: " << max_val;
return max_val;
}
int main() {
int x = 2, y = 2;
int ar[] = {7, 6, 4, 3};
MaxValue(ar, x, y);
return 0;
}
आउटपुट
Maximum Value: 100
व्याख्या
अभिव्यक्ति: (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 ← अधिकतम