এটি যেকোনো বীজগাণিতিক অভিব্যক্তির সর্বোচ্চ মান বের করার একটি সি++ প্রোগ্রাম। (x1 + x2 + x3 + ... + xa) * (y1 + y2 + ... + yb) আকারের একটি বীজগাণিতিক অভিব্যক্তি এবং (a + b) পূর্ণসংখ্যা দেওয়া আছে। a সংখ্যা এবং বাকি b সংখ্যার সব সম্ভাব্য কোম্বিনেশন বিবেচনা করে তাদের মান হিসাব করা হয়, যার থেকে সর্বোচ্চ মান বের করা হয়।
আলগরিদম
Begin
function MaxValue() :
Arguments:
a[] = যেই অ্যারেতে এলিমেন্টগুলো স্টোর করা আছে।
x, y = পূর্ণসংখ্যা।
Body of the function:
1) অ্যারে এলিমেন্টগুলোর যোগফল বের করুন।
2) s = 0 ইনিশিয়ালাইজ করুন।
3) for loop i = 0 to (x + y - 1) পূর্ণসংখ্যাগুলো ২৫ দিয়ে শিফট করুন যাতে তারা পজিটিভ হয়।
4) একটি বুলিয়ান অ্যারে p[i][j] ডিক্লেয়ার করুন যা ট্রু রিপ্রেজেন্ট করে যদি i সংখ্যা চুনে যোগফল j পাওয়া যায়।
5) অ্যারে ইনিশিয়ালাইজেশন।
6) for loop i = 0 to (x + y) - 1 لتحديد যদি p[i][j] ট্রু হয়, মানে (x + y) সংখ্যা থেকে i সংখ্যা বেছে নিয়ে যোগফল j পাওয়া যায়।
7) max_value = -INF ইনিশিয়ালাইজ করুন।
8) for loop i = 0 to (MAX * MAX + 1) - 1 চেক করুন একটি নির্দিষ্ট যোগফল x সংখ্যা বেছে নিয়ে পাওয়া যায় কিনা।
if (p[x][i])
আসল যোগফল বের করুন যেহেতু আমরা সংখ্যাগুলো ২৫ দিয়ে শিফট করেছি নেগেটিভ ইন্ডেক্সিং এড়াতে।
9) max_value প্রিন্ট করুন।
End
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
#define INF 1e9
#define MAX 25
int MaxValue(int a[], int x, int y) {
int s = 0;
for (int i = 0; i < (x + y); i++) {
s += a[i];
a[i] += 25;
}
bool p[MAX+1][MAX * MAX + 1];
memset(p, 0, sizeof(p));
p[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 (p[k - 1][j])
p[k][j + a[i]] = 1;
}
}
}
int max_value = -INF;
for (int i = 0; i < MAX * MAX + 1; i++) {
if (p[x][i]) {
int tmp = i - 25 * x;
max_value = max(max_value, tmp * (s - tmp));
}
}
cout << "Maximum Value: " << max_value;
}
int main() {
int x = 2, y = 2;
int ar[] = { 7, 6, 4, 3 };
MaxValue(ar, x, y);
return 0;
}
আউটপুট
Maximum Value: 100