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

C++-এ Partition Equal Subset Sum

এই সমস্যায় একটি পজিটিভ ইন্টিজার অ্যারে দেওয়া থাকলে, সেটিকে দুটি সাবসেটে ভাগ করা সম্ভব কিনা যাতে দুটোর সাম সমান।

উদাহরণ: [1,5,11,5] -> আউটপুট true। পার্টিশন: [1,5,5] এবং [11]।

সমাধানের পদ্ধতি (0/1 Knapsack - Subset Sum)

  • মোট সাম sum। যদি বিজোড় হয়, false।
  • টার্গেট target = sum / 2।
  • dp[j] = সাম j বানানো সম্ভব কিনা।
  • dp[0] = true।
  • প্রতিটি নাম্বার num এর জন্য, target থেকে num পর্যন্ত পिछানো तरफ লুপ: dp[j] = dp[j] || dp[j-num]।

উদাহরণ (C++)

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

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int sum = accumulate(nums.begin(), nums.end(), 0);
        if (sum % 2 != 0) return false;
        int target = sum / 2;
        vector<bool> dp(target + 1, false);
        dp[0] = true;
        for (int num : nums) {
            for (int j = target; j >= num; j--) {
                dp[j] = dp[j] || dp[j - num];
            }
        }
        return dp[target];
    }
};

int main() {
    Solution ob;
    vector<int> v = {1, 5, 11, 5};
    cout << (ob.canPartition(v) ? "true" : "false");
    return 0;
}

ইনপুট

[1,5,11,5]

আউটপুট

true
  1. বাইনারি ট্রি সমান পার্টিশান করা C++-এ

  2. C++-এ দেওয়া N-এর সমান যোগফল দেয় এমন সর্বোচ্চ প্রাইম সংখ্যা

  3. C++-এ অ্যারেয়ের সর্বোচ্চ গড় যোগফল পার্টিশন

  4. C++-এ অ্যালিকোট সম (Aliquot Sum)