কম্পিউটার টিউটোরিয়াল

C++-এ সর্বোচ্চ এক উপাদান সরিয়ে সাবঅ্যারে যোগফল সর্বাধিক করা

সমস্যা বিবরণ

N ইন্টিজারের একটি অ্যারে arr[] দেওয়া আছে। কাজ হল প্রথমে সর্বোচ্চ সাব-অ্যারে যোগফল বের করা এবং তারপর সাব-অ্যারে থেকে সর্বোচ্চ একটি উপাদান সরানো। সর্বোচ্চ একটি উপাদান সরাতে হবে যাতে সরানোর পর সর্বোচ্চ যোগফল সর্বাধিক হয়।

যদি দেওয়া ইনপুট অ্যারে হয় {1, 2, 3, -2, 3} তবে সর্বোচ্চ সাব-অ্যারে যোগফল হয় {2, 3, -2, 3}। তারপর আমরা -2 সরাতে পারি। সরানোর পর বাকি অ্যারে হয়:

{1, 2, 3, 3} যার যোগফল ৯ যা সর্বোচ্চ।

অ্যালগরিদম

1. ক্যাডেনস অ্যালগরিদম ব্যবহার করে সর্বোচ্চ সাবঅ্যারে যোগফল বের করুন। 
2. একবার যোগফল পেলে, ক্যাডেনস অ্যালগরিদম আবার প্রয়োগ করে কিছু ছোট পরিবর্তন সহ সর্বোচ্চ যোগফল আবার বের করুন।

উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 
int getMaxSubarraySum(int* arr, int n) { 
    int max = INT_MIN; 
    int currentMax = 0; 
    for (int i = 0; i < n; ++i) { 
        currentMax = currentMax + arr[i]; 
        if (max < currentMax) max = currentMax; 
        if (currentMax < 0) currentMax = 0; 
    } 
    return max; 
} 
int getMaxSum(int* arr, int n) { 
    int cnt = 0; 
    int minVal = INT_MAX; 
    int minSubarr = INT_MAX; 
    int sum = getMaxSubarraySum(arr, n); 
    int max = INT_MIN; 
    int currentMax = 0; 
    for (int i = 0; i < n; ++i) { 
        currentMax = currentMax + arr[i]; 
        ++cnt; 
        minSubarr = min(arr[i], minSubarr); 
        if (sum == currentMax) { 
            if (cnt == 1) minVal = min(minVal, 0); 
            else minVal = min(minVal, minSubarr); 
        } 
        if (currentMax < 0) { 
            currentMax = 0; 
            cnt = 0; 
            minSubarr = INT_MAX; 
        } 
    } 
    return sum - minVal; 
} 
int main() { 
    int arr[] = {1, 2, 3, -2, 3}; 
    int n = sizeof(arr) / sizeof(arr[0]); 
    cout << "Maximum sum = " << getMaxSum(arr, n) << endl; 
    return 0; 
}

আউটপুট

Maximum sum = 9
  1. দেওয়া অ্যারেকে k বার রিপিট করে তৈরি অ্যারেতে সর্বোচ্চ সাবঅ্যারে যোগফল C++-এ

  2. সর্বোচ্চ k সংখ্যক এলিমেন্টের চিহ্ন ফ্লিপ করে সর্বোচ্চ সাবঅ্যারে যোগফল C++-এ

  3. সর্বোচ্চ দুটি এলিমেন্ট ইনভার্ট করে সর্বোচ্চ সাবঅ্যারে যোগফল C++-এ

  4. C++-এ K বার 네가শন দিয়ে অ্যারে যোগফল সর্বাধিক করা