Q14 Subset Sum Equal To K - Coding Ninjas

PHOTO EMBED

Sat Jul 22 2023 07:36:26 GMT+0000 (Coordinated Universal Time)

Saved by @Ayush_dabas07

import java.util.* ;
import java.io.*; 
public class Solution {
    public static boolean subsetSumToK(int n, int k, int arr[]){
        // return solve(arr , n-1 , k , new Boolean[n][k+1]);

        //Tabulization -> n*k  | Sc- n*k
        boolean[][] dp = new boolean[n][k+1];
        for(int i = 0 ;i < n ; i++){
            for(int j = 0 ; j < k+1 ; j++){
                if(i == 0){
                    if(j == 0 || j-arr[0] == 0)
                    dp[i][j] = true;

                    else dp[i][j] = false;
                }
                else{
                    boolean take = false , notake = false;

                    if(j-arr[i] >= 0)
                    take = dp[i-1][j-arr[i]];

                    notake = dp[i-1][j];

                    dp[i][j] = take||notake;
                }
            }
        }

        return dp[n-1][k];
    }

    //Recursion -> 2^(n*k) Memoization-> 2*n*k | SC- n*k + n*k
    public static boolean solve(int arr[] ,int idx ,  int k , Boolean[][] dp){
        if(k < 0)
        return false;

        if(idx == 0){
            if(k == 0 || k - arr[0]== 0)
            return true;

            return false;
        }
        if(dp[idx][k] != null)
        return dp[idx][k];

        //take / notake faith calls from (n-1,k) 
        boolean take = solve(arr ,idx-1 , k-arr[idx] , dp );
        boolean notake = solve(arr , idx-1 , k , dp);
        
        return dp[idx][k] = take||notake;
    }
}
content_copyCOPY

https://www.codingninjas.com/studio/problems/subset-sum-equal-to-k_1550954?leftPanelTab