algorithm
  • মডিউল ১ঃ গ্রাফের বেসিক ধারণা
    • মডিউল ১_০ঃ অ্যালগরিদম
    • মডিউল ১_১ঃ গ্রাফের বেসিক
    • মডিউল ১_২ঃ অ্যাডজাসেন্সি ম্যাট্রিক্স
    • মডিউল ১_৩ঃ অ্যাডজাসেন্সি ম্যাট্রিক্স ইমপ্লিমেন্টশন
    • মডিউল ১_৪ঃ অ্যাডজাসেন্সি লিস্ট
    • মডিউল ১_৫ঃ অ্যাডজাসেন্সি লিস্ট ইমপ্লিমেন্টশন
    • মডিউল ১_৬ঃ STL pair
    • মডিউল ১_৭ঃ Edge লিস্ট
  • মডিউল ২ঃ ব্রেডথ ফার্স্ট সার্চ
    • মডিউল ২_০ঃ ব্রেডথ ফার্স্ট সার্চ কি?
    • মডিউল ২_১ঃ বিএফএস এলগোরিদম
    • মডিউল ২_২ঃ বিএফএস কোড ইমপ্লিমেন্টেশন
    • মডিউল ২_৩ঃ বিএফএস লেভেল ট্র্যাকিং
    • মডিউল ২_৪ঃ কমপ্লেক্সিটি অ্যানালাইসিস
    • মডিউল ২_৫ঃ পাথ প্রিন্টিং
    • মডিউল ২_৬ঃ পাথ প্রিন্টিং ইমপ্লিমেন্টেশন
  • মডিউল ৩ঃ DFS এবং 2D গ্রীড
    • মডিউল ৩_০ঃ ইনট্রোডাকশন
    • মডিউল ৩_১ঃ DFS
    • মডিউল ৩_২ঃ DFS ইমপ্লিমেন্টশন
    • মডিউল ৩_৩ঃ 2D গ্রীড
    • মডিউল ৩_৪ঃ 2D গ্রীডে DFS ইমপ্লিমেন্টশন
    • মডিউল ৩_৫ঃ 2D গ্রীডে BFS ইমপ্লিমেন্টশন
  • মডিউল ৫ঃ Cycle Detection
    • মডিউল ৫_০ঃ ইনট্রোডাকশন
    • মডিউল ৫_১ঃ Cycle Detection Undirected গ্রাফে
    • মডিউল ৫_২ঃ Cycle Detection Undirected গ্রাফ BFS ইমপ্লিমেন্টশন
    • মডিউল ৫_৩ঃ Cycle Detection Undirected গ্রাফ DFS ইমপ্লিমেন্টশন
    • মডিউল ৫_৪ঃ Cycle Detection Directed গ্রাফে
    • মডিউল ৫_৫ঃ Cycle Detection Directed গ্রাফ DFS ইমপ্লিমেন্টশন
  • মডিউল ৬ঃ Dijkstra এলগরিদম
    • মডিউল ৬_০ঃ ইনট্রডাকশন
    • মডিউল ৬_১ঃ কেন Dijkstra এলগরিদম আমাদের প্রয়োজন?
    • মডিউল ৬_২ঃ পাথ রিলেক্সেশন
    • মডিউল ৬_৩ঃ Dijkstra Naive Approach
    • মডিউল ৬_৪ঃ Dijkstra Naive Approach Code
    • মডিউল ৬_৫ঃ Dijkstra Optimize Approach
    • মডিউল ৬_৭ঃ Dijkstra Optimize Code
  • মডিউল ৭ঃ Bellmanford এবং Floyd Warshall এলগোরিদম
    • মডিউল ৭_১ঃ কেন দরকার Bellmanford?
    • মডিউল ৭_২ঃ Bellmanford Algorithm
    • মডিউল ৭_৪ঃ Bellmanford Algorithm Code
    • মডিউল ৭_৫ঃ ডিটেক্ট নেগেটিভ সাইকেল
    • মডিউল ৭_৬ঃ কেন Floyd Warshall এলগোরিদম প্রয়োজন?
    • মডিউল ৭_৭ঃ Floyd Warshall Algorithm
    • মডিউল ৭_৮ঃ Floyd Warshall Algoritm Code
  • মডিউল ৯ঃ BFS , DFS দিয়ে Problem Solving
    • মডিউল ৯_০ঃ ইনট্রোডাকশন
    • মডিউল ৯_১ঃ Island Perimeter [Leetcode]
    • মডিউল ৯_২ঃ Find if Path Exists in Graph [Leetcode]
    • মডিউল ৯_৩ঃ Max Area of Island [Leetcode]
    • মডিউল ৯_৪ঃ Number of Islands [Leetcode]
    • মডিউল ৯_৫ঃ Count Sub Islands [Leetcode]
    • মডিউল ৯_৬ঃ Number of Closed Islands [Leetcode]
  • মডিউল ১০ঃ Disjoint Set Union
    • মডিউল ১০_০ঃ ইনট্রডাকশন
    • মডিউল ১০_১ঃ DSU কি?
    • মডিউল ১০_২ঃ Union Find কিভাবে কাজ করে?
    • মডিউল ১০_৩ঃ Find অপারেশন ইমপ্লিমেন্টেশন
    • মডিউল ১০_৫ঃ Union and Union by Size
    • মডিউল ১০_৭ঃ Union by rank
  • মডিউল ১১ঃ DSU Cycle Detection এবং MST
    • মডিউল ১১_০ঃ ইনট্রডাকশন
    • মডিউল ১১_১ঃ DSU দিয়ে Cycle Detection Undirected গ্রাফে
    • মডিউল ১১_২ঃ DSU দিয়ে Cycle Detection Undirected গ্রাফে ইমপ্লিমেন্টেশন
    • মডিউল ১১_৩ঃ Minimum Spanning Tree কি ?
    • মডিউল ১১_৪ঃ MST এর জন্য Kruskals Algorithm
    • মডিউল ১১_৫ঃ MST এর জন্য Kruskals Algorithm ইমপ্লিমেন্টেশন
  • মডিউল ১৩ঃ বেসিক গ্রাফ রিক্যাপ
    • মডিউল ১৩_০ঃ ইনট্রডাকশন
    • মডিউল ১৩_১ঃ এডজেসেন্সি ম্যাট্রিক্স
    • মডিউল ১৩_২ঃ এডজেসেন্সি লিস্ট ও এজ লিস্ট
    • মডিউল ১৩_৩ঃ এডজেসেন্সি লিস্ট টু এডজেসেন্সি ম্যাট্রিক্স পার্ট-১
    • মডিউল ১৩_৪ঃ এডজেসেন্সি লিস্ট টু এডজেসেন্সি ম্যাট্রিক্স পার্ট-২
    • মডিউল ১৩_৫ঃ এজ লিস্ট টু ম্যাট্রিক্স
    • মডিউল ১৩_৬ঃ এডজেসেন্সি ম্যাট্রিক্স টু এডজেসেন্সি লিস্ট
    • মডিউল ১৩_৭ঃ এজ লিস্ট টু এডজেসেন্সি লিস্ট
    • মডিউল ১৩_৮ঃ এডজেসেন্সি ম্যাট্রিক্স টু এজ লিস্ট
    • মডিউল ১৩_৯ঃ এডজেসেন্সি লিস্ট টু এজ লিস্ট
  • মডিউল ১৪ঃ প্রব্লেম সল্ভিং গ্রাফ অ্যালগরিদম দিয়ে
    • মডিউল ১৪_০ঃ ইনট্রডাকশন
    • মডিউল ১৪_১ঃ Romeo and Juliet
    • মডিউল ১৪_২ঃ Romeo and Juliet ইমপ্লিমেন্টেশন
    • মডিউল ১৪_৩ঃ Minimum Cost for Business
    • মডিউল ১৪_৪ঃ Dijkstra Path Printing
    • মডিউল ১৪_৫ঃ Building Roads
    • মডিউল ১৪_৬ঃ Building Roads ইমপ্লিমেন্টেশন
    • মডিউল ১৪_৭ঃ Message Routes
  • মডিউল ১৫ঃ প্রব্লেম সল্ভিং ২ গ্রাফ অ্যালগরিদম দিয়ে
    • মডিউল ১৫_০ঃ ইনট্রডাকশন
    • মডিউল ১৫_১ঃ Sundorban ইমপ্লিমেন্টেশন সহ
    • মডিউল ১৫_২ঃ Guilty Prince ইমপ্লিমেন্টেশন সহ
    • মডিউল ১৫_৩ঃ Commandos
    • মডিউল ১৫_৪ঃ Commandos ইমপ্লিমেন্টেশন
    • মডিউল ১৫_৫ঃ D. Roads not only in Berland
    • মডিউল ১৫_৬ঃ D. Roads not only in Berland ইমপ্লিমেন্টেশন
  • মডিউল ১৭ঃ বেসিক ডাইনামিক প্রোগামিং
    • মডিউল ১৭_০ঃ ইনট্রডাকশন
    • মডিউল ১৭_১ঃ ডাইনামিক প্রোগ্রামিং কি?
    • মডিউল ১৭_২ঃ ফ্যাক্টোরিয়াল নাম্বার
    • মডিউল ১৭_৩ঃ Fibonacci Series
    • মডিউল ১৭_৪ঃ Fibonacci Subproblem
    • মডিউল ১৭_৬ঃ Fibonacci Memoization
    • মডিউল ১৭_৭ঃ Bottom up approach in Fibonacci series
  • মডিউল ১৮ঃ Knapsack
    • মডিউল ১৮_০ঃ ইনট্রডাকশন
    • মডিউল ১৮_১ঃ Knapsack
    • মডিউল ১৮_২ঃ Knapsack Recursive Approach
    • মডিউল ১৮_৪ঃ Knapsack Top Down Approach ইমপ্লিমেন্টেশনসহ
    • মডিউল ১৮_৫ঃ Knapsack Bottom Up Approach
    • মডিউল ১৮_৬ঃ Knapsack Bottom Up ইমপ্লিমেন্টেশন
  • মডিউল ১৯ঃ 0-1 Knapsack Variation
    • মডিউল ১৯_০ঃ ইনট্রডাকশন
    • মডিউল ১৯_১ঃ সাবসেট সাম টপ ডাউন
    • মডিউল ১৯_২ঃ সাবসেট সাম Bottom up
    • মডিউল ১৯_৩ঃ Count of Subset Sum
    • মডিউল ১৯_৪ঃ Count no of Zeroes in Subset
    • মডিউল ১৯_৫ঃ Equal Sum Partition
    • মডিউল ১৯_৬ঃ Minimum Subset Sum
    • মডিউল ১৯_৭ঃ Count Subset Sum with given difference
    • মডিউল ১৯_৮ঃ Target Sum
  • বোনাস মডিউল ২১ঃ Unbounded Knapsack
    • মডিউল ২১_১ঃ Unbounded Knapsack Approach
    • মডিউল ২১_২ঃ Unbounded Knapsack ইমপ্লিমেন্টেশন
    • মডিউল ২১_৩ঃ Rod Cutting Problem
    • মডিউল ২১_৪ঃ Coin Change 1
    • মডিউল ২১_৫ঃ Coin Change 2
  • বোনাস মডিউল ২২ঃ Longest Common Subsequence
    • মডিউল ২২_১ঃ Substring vs Subsequence
    • মডিউল ২২_২ঃ Longest Common Subsequence Approach
    • মডিউল ২২_৩ঃ LCS Top Down Implementation
    • মডিউল ২২_৪ঃ LCS Bottom Up Implementation
    • মডিউল ২২_৫ঃ LCS Table Fill Up
    • মডিউল ২২_৬ঃ Printing LCS Approach
    • মডিউল ২২_৭ঃ Printing LCS Implementation
    • মডিউল ২২_৮ঃ Longest Common Substring Bottom Up and Printing
  • বোনাস মডিউল ২৩ঃ Merge Sort
    • মডিউল ২৩_০ঃ ইনট্রডাকশন
    • মডিউল ২৩_১ঃ Merge Two Sorted Arrays
    • মডিউল ২৩_২ঃ Merge two sorted array implementation
    • মডিউল ২৩_৩ঃ How Divide Works in Merge Sort
    • মডিউল ২৩_৪ঃ Merge Sort
  • মডিউল ২ঃ ব্রেডথ ফার্স্ট সার্চ
    • Untitled
    • Page 2
Powered by GitBook
On this page
  1. মডিউল ১৯ঃ 0-1 Knapsack Variation

মডিউল ১৯_৬ঃ Minimum Subset Sum

আমরা এখন আরেকটা ভেরিয়েশন দেখবো। সেটা হচ্ছে মিনিমাম সাবসেট সাম।

ধরি A = {1,4,5,11}

তাহলে আমার বের করতে হবে এদের সাবসেট সমূহের মধ্যে মিনিমান সাবসেট সাম কত হবে।

আমরা যদি {১,৪,৫} কে একটা সাবসেট বানায় আর ১১ কে আরেকটা সাবসেট এ নেই তাহলে ডিফারেন্স হবে ১।

এটাও খুব সহজেই করা যায়।

আমরা প্রথমে এই এ্যারে এর প্রত্যেক সাবসেট এর সাম বের করবো। এরপর টোটাল সাম থেকে সেই সাবসেট গুলোর সাম বিয়োগ করে দেখবো। তাহলে আমরা ২য় সাবসেট এর সাম পাবো। তাহলে আমরা কম্পেয়ার করে মিনিমান নির্বাচন করব।

ধরি একটা সাবসেটের সাম হচ্ছে = a

আরেকটা সাবসেট এর সাম হচ্ছে = b

আর টোটাল সাম হচ্ছে = s

তাহলে, a+b = s

তাহলে b = s-a

এখন প্রশ্ন আসতে পারে যে আমরা এই একটা সাবসেটের বিভিন্ন সাম গুলো কয় পাবো। আন্সার হচ্ছে সাবসেট সাম এর টেবিল থেকে। সেখানে লাস্ট রো এর দিকে দেখবো। যেসকল সারিতে true পাবো সেগুলোকে আলাদা করে নেবো। তারপর টোটাল সাম থেকে প্রতিবার এক একটা ভ্যালুকে মাইনাস করে দেখবো আর ওই সাবসেট সাম ও এর ডিফারেন্স এর মিনিমাম বের করব।

// Some code
    for (int i = 0; i <= n; i++)
    {
        for (int j = 0; j <= s; j++)
        {
            if (dp[i][j] == 1)
                v.push_back(j);
        }
    }
    int ans = INT_MAX;
    for (int val : v)
    {
        int s1 = val;
        int s2 = s - s1;
        ans = min(ans, abs(s1 - s2));
    }
    cout << ans << endl;

সম্পূর্ণ কোডঃ

// Some code
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int a[n], s = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        s += a[i];
    }
    bool dp[n + 1][s + 1];
    dp[0][0] = true;
    for (int i = 1; i <= s; i++)
        dp[0][i] = false;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 0; j <= s; j++)
        {
            if (a[i - 1] <= j)
            {
                dp[i][j] = dp[i - 1][j - a[i - 1]] || dp[i - 1][j];
            }
            else
            {
                dp[i][j] = dp[i - 1][j];
            }
        }
    }
    vector<int> v;
    for (int i = 0; i <= n; i++)
    {
        for (int j = 0; j <= s; j++)
        {
            if (dp[i][j] == 1)
                v.push_back(j);
        }
    }
    int ans = INT_MAX;
    for (int val : v)
    {
        int s1 = val;
        int s2 = s - s1;
        ans = min(ans, abs(s1 - s2));
    }
    cout << ans << endl;
    return 0;
}
Previousমডিউল ১৯_৫ঃ Equal Sum PartitionNextমডিউল ১৯_৭ঃ Count Subset Sum with given difference

Last updated 1 year ago