bool f(int ind,int target,vector<int>& nums,vector<vector<int>>& dp) { if(dp[ind][target]!=-1) return dp[ind][target]; if(target==0)return true; if(ind==0)return (nums[0]==target); bool nottake = f(ind-1,target,nums,dp); bool take=false; if(target>=nums[ind]) take = f(ind-1,target-nums[ind],nums,dp); return dp[ind][target]=(take || nottake); } bool isSubsetSum(vector<int>arr, int sum){ // code here int n = arr.size(); vector<vector<int>> dp(n,vector<int>(sum+1,-1)); return f(n-1,sum,arr,dp); }