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);
}