DP 14. Subset Sum Equals to Target | Identify DP on Subsequences and Ways to Solve them

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ก.พ. 2025

ความคิดเห็น • 1.1K

  • @takeUforward
    @takeUforward  3 ปีที่แล้ว +202

    I need your support, and you can do that by giving me a like, and commenting "understood" if I was able to explain you.
    Note: Please add a check for arr[0]

    • @riderpd09
      @riderpd09 3 ปีที่แล้ว +2

      Just love the meta of solving subsequences by "take" and "not-take" :) A big US!!!

    • @amishasahu1586
      @amishasahu1586 2 ปีที่แล้ว +1

      Understood Sir

    • @kiranbari6284
      @kiranbari6284 2 ปีที่แล้ว +1

      i think subset sum also can be done using only one array......as you did in knapsack problem....

    • @anonymousvoid6356
      @anonymousvoid6356 2 ปีที่แล้ว

      Huge big understood!!!!

    • @manishprajapati8544
      @manishprajapati8544 2 ปีที่แล้ว +1

      mera full support bhai 👍👍👍

  • @ParodyCSEDept
    @ParodyCSEDept 10 หลายเดือนก่อน +25

    Tbh in most of the previous 13 problems, I was intuitively able to guess the DP recurrence relation (without thinking about recursion and all). However for this question, intuition didn't kick in. Then, I remembered your words that if I can write a recursive solution for the problem then after following your steps, I will be able to reach the DP solution. So I did follow all the steps and yeah I really was able to reach the most optimal solution for this on my own. Hats off to you Striver!
    Understood!

    • @anshpradhan1954
      @anshpradhan1954 5 หลายเดือนก่อน +2

      You know what's cool about his teaching method, it actually works, he boiled down a complex topic like DP to mere steps which you just have to execute and reach the optimal solution, hats off to this man

    • @VarshaSingh-hi2sb
      @VarshaSingh-hi2sb 5 หลายเดือนก่อน

      Why we are taking a 2 d dp array and not 1 since we are given a 1 d array? is it because both target and index are changing?

    • @ParodyCSEDept
      @ParodyCSEDept 5 หลายเดือนก่อน

      @@VarshaSingh-hi2sb yes we consider all indices as well as all targets because they help us to reach the final answer.

    • @prnvtj
      @prnvtj หลายเดือนก่อน

      @@VarshaSingh-hi2sb yes. we choose the array dimensions based on the number of parameters changing.

  • @ankitadas5833
    @ankitadas5833 3 ปีที่แล้ว +207

    Understood! you ended the video by submitting space optimization code at Morning 02:53 AM,,,,, How much energy you have 😱😱😱😱. Hats off to your dedication.

  • @tanmay9928
    @tanmay9928 2 ปีที่แล้ว +112

    Had to watch the video multiple times in order to fully understand this concept. In all seriousness, there are so many key points to be kept in mind when learning this concept.

    • @charanteja2407.
      @charanteja2407. ปีที่แล้ว +2

      Can anyone list those key points here

  • @nityanandbhaskar2155
    @nityanandbhaskar2155 ปีที่แล้ว +56

    Just a edge case correction. dp[0][arr[0]] could give out of bound exception if arr[0] > target. So use a check for that.

    • @devsrivastava2300
      @devsrivastava2300 ปีที่แล้ว

      that won't be an edge case as initially the whole dp is marked false in tabulation method

    • @Pirates571
      @Pirates571 ปีที่แล้ว +1

      ​@@devsrivastava2300 that will be an edge case if arr[0] is greater than the half of total sum then it will be out of bounds

    • @jayendraawasthi2646
      @jayendraawasthi2646 ปีที่แล้ว +4

      @@devsrivastava2300 assume arr[0] = 1000 and target is 10. It will give error.

    • @devsrivastava2300
      @devsrivastava2300 ปีที่แล้ว +1

      Oh ok got it , thanks

    • @muditkhanna8164
      @muditkhanna8164 ปีที่แล้ว

      keen observation.

  • @bhoomikagajpal674
    @bhoomikagajpal674 หลายเดือนก่อน +2

    Amazing!!!! Couldn't understand this for 6 years and 1 day you made it seem so easy!!!!!!

  • @swapan6785
    @swapan6785 ปีที่แล้ว +6

    Nicely explained! Had to do dry run multiple times for full understanding.
    It seems very tough to directly write tabulation/space optimization method, but easy when starting from recursion and following the order.

  • @GManiKarthik
    @GManiKarthik 2 หลายเดือนก่อน +3

    The first time, I tried to understand this concept by just watching the explanation 🧑‍🏫👀. I assumed I could skip deeper thinking and would grasp it in future lectures of this pattern 🤔➡📚. But no, my mind wasn’t cooperating 🤯. So, I decided to watch it again 📺, this time actively solving along with pen and paper ✍📄. After that, I mastered it and now feel very confident 💪✨!
    #Understood #DP14 #Hatsoff #Striver

  • @MohammadKhan-ld1xt
    @MohammadKhan-ld1xt 2 ปีที่แล้ว +18

    Before starting this dp series, I was really confused as to which playlist I should follow as there were many good playlist , but after listening to first 2 lectures, I knew that this is the best dp playlist I could ever find and this includes the paid courses too. I have paid courses but I prefer this.
    I am addicted to this playlist. Seriously!!! Hats of to you bhaiyya🔥Keep striving and good luck. Hope to see you on the right path..

  • @kevinthant2952
    @kevinthant2952 ปีที่แล้ว +2

    So far to me, you are the best explainer of algorithm questions on the whole Internet. Thank you so much for your amazing work on these explanation videos. 🙏🙌

  • @rijumondal6876
    @rijumondal6876 ปีที่แล้ว +3

    He is probably one of the most genius guy I ever come across

  • @k4ranjith
    @k4ranjith 3 ปีที่แล้ว +13

    Understood, Very well explained. the best DP playlist. Thanks for taking time and making the videos.

  • @lambar0
    @lambar0 2 ปีที่แล้ว +10

    Your energy and passion for breaking it down is commendable… thanks

    • @HEMANTPORWAL-t7d
      @HEMANTPORWAL-t7d 7 หลายเดือนก่อน +1

      in tabulation
      why dp[0][arr[0] ] is equal to true

    • @HEMANTPORWAL-t7d
      @HEMANTPORWAL-t7d 7 หลายเดือนก่อน +1

      understood

  • @dsp-io9cj
    @dsp-io9cj ปีที่แล้ว +11

    dp[0][arr[0]]=1; in this what if arr[0] is greater than target, coz given constraints are arr[i]

    • @AD-fs6hr
      @AD-fs6hr 8 หลายเดือนก่อน +1

      Correct. I suppose the test cases in Coding Ninjas are made such that, target is always greater than first element. otherwise it would have thrown error.

    • @rushidesai2836
      @rushidesai2836 หลายเดือนก่อน

      We need an if check here.

  • @SriAdiNarayanaReddySabbella
    @SriAdiNarayanaReddySabbella 7 หลายเดือนก่อน +4

    Understood! Tabulation is tricky in this one a little bit. But, your explanation just made it so easy. Thank you so much for this amazing series ❤

    • @VarshaSingh-hi2sb
      @VarshaSingh-hi2sb 5 หลายเดือนก่อน +1

      Why we are taking a 2 d dp array and not 1 since we are given a 1 d array? is it because both target and index are changing?

    • @SriAdiNarayanaReddySabbella
      @SriAdiNarayanaReddySabbella 5 หลายเดือนก่อน +1

      ​@@VarshaSingh-hi2sbThe DP array that we take in a question is not at all related to the array that is given to us. As you said, since we can have multiple function calls for the same index with different targets, we are maintaining a 2D DP array. For example, in [1,2,3,4,5] with target 10, if we pick 5 at index 4, then from index 3 onwards, our target will be 10-5=5, if we don't pick 5, then target will remain the same i.e. 10. Since at the same index, function calls are made for different targets, to optimise them, we need to have a 2D array for every possible target at every possible index. Hope it helps!

  • @_sk99
    @_sk99 4 หลายเดือนก่อน +1

    The way he teaches is fabulous!.... I love his enthu

  • @ajith4249
    @ajith4249 ปีที่แล้ว +13

    Tabulation burra padu . Super oo

  • @nagame859
    @nagame859 ปีที่แล้ว +2

    understood!
    just the recurrence tree is enough to understand this problem.. which again.. you explained it in the best way in the recursive series.. props to you 👏 🙌 🙏

  • @roshangupta8161
    @roshangupta8161 2 ปีที่แล้ว +10

    Understood each and everything!!!Thanks for this amazing Dp series.

    • @Abhijeet-st4bj
      @Abhijeet-st4bj 2 ปีที่แล้ว

      bhai why dp[ind+1][target+1]?? why not dp[ind+1][target+1]??

    • @deviprasad_bal
      @deviprasad_bal ปีที่แล้ว +1

      @@Abhijeet-st4bj do you mean why not dp[ind][target] ??

  • @lalitchahar1068
    @lalitchahar1068 ปีที่แล้ว +1

    it took time to understand it but it worth every second
    fabulous explaination thank you soo much for these high quality videos..🤗

  • @mr.jacker3951
    @mr.jacker3951 2 ปีที่แล้ว +11

    was Asked in Google last year in Interview

  • @oliverlowcy
    @oliverlowcy 2 ปีที่แล้ว +2

    Had trouble understanding bottom up approach till I saw this vid. Thanks a lot!

  • @priyanshubansal6820
    @priyanshubansal6820 2 ปีที่แล้ว +4

    This is the best dp solving technique that I have ever seen. thank you for giving us this wonderful playlist

  • @AnirudhNC
    @AnirudhNC 10 วันที่ผ่านมา

    Understood
    Thanks a lot u are really amazing and you are way more ahead of Our University Facutly

  • @zeroanims4113
    @zeroanims4113 ปีที่แล้ว +10

    27:58 this is a very important point to understand. I wrote the recursion slightly different from striver (i start from 0 -> N) meaning the top of my recursion is 0 and the bottom is N. So my dp bottom up nested loop is from n-1 going to 0, and will return dp[0[[k], it should still work
    code:
    bool dpWay(int n, int k, vector& arr){
    vector dp(n+1, vector(k+1, false));
    for (int i = 0; i = 0; i--){
    for (int j = 1; j = arr[i]) take = dp[i+1][j-arr[i]];
    dp[i][j] = skip || take;
    }
    }
    return dp[0][k];
    }
    bool rcMemoWay(int i, vector& nums, int tar, vector& memo){
    if (tar == 0) return true;
    if (i == nums.size()) return false;
    if (memo[i][tar] != -1) return memo[i][tar];
    bool skip = rcMemoWay(i+1, nums, tar, memo);
    bool take = false;
    if (tar >= nums[i]) take = rcMemoWay(i+1, nums, tar - nums[i], memo);
    memo[i][tar] = skip || take;
    return memo[i][tar];
    }

    • @GauravThinks
      @GauravThinks ปีที่แล้ว +2

      yahi dhund raha tha mai bhai ♥

  • @stith_pragya
    @stith_pragya ปีที่แล้ว +2

    UNDERSTOOD..................Thank You So Much for this wonderful video..........🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻

  • @chetanthakral5322
    @chetanthakral5322 3 ปีที่แล้ว +140

    I think he is missing a if case , if arr[0] >=k , then we would be getting a sigsegv runtime error.
    To remove that we can replace dp[0][arr[0]] = true; by
    if(arr[0]

    • @takeUforward
      @takeUforward  3 ปีที่แล้ว +51

      Corrected in the next video. Thanks.

    • @elements8630
      @elements8630 2 ปีที่แล้ว +9

      I was confused about this part. thanks, bud!

    • @rishabhtater889
      @rishabhtater889 2 ปีที่แล้ว +4

      but why in the first place dp[0][arr[0]]=true is mentioned?

    • @pk4288
      @pk4288 2 ปีที่แล้ว +6

      @@rishabhtater889 when we reach index 0 and target left is equal to arr[0] then only we will return true otherwise it will be false. so in tabulation we are initializing like that only

    • @rishabhtater889
      @rishabhtater889 2 ปีที่แล้ว +1

      @@pk4288 so in tabulation, we are assuming it to be true only?
      Then we'll move forward?

  • @smitboraniya6752
    @smitboraniya6752 2 ปีที่แล้ว +1

    At first I thought your methos is very obvious, but as we go further in dp playlist it proves to be much stronger tool to apply for solving tough problems.

  • @arpitrajput6424
    @arpitrajput6424 2 ปีที่แล้ว +8

    hey! we can add one more line to reduce further looping if we get our ans
    add if(dp[ind][k]==true)return true;
    at before end of second loop try it.
    vector dp(n,vector(k+1,false));

    for(int i=0;i

  • @shivambajaj7640
    @shivambajaj7640 9 หลายเดือนก่อน

    In two days, I am able to convert my recursive solutions to iterative. All thanks to you!

  • @parthsalat
    @parthsalat 2 ปีที่แล้ว +8

    Time complexity:
    Recursion: 19:37
    Memoization: 22:20
    Space optimization: 36:44
    Code:
    Recursion: 29:32
    Memoization: 30:52
    Tabulation: 33:15

  • @urvashiparmar4856
    @urvashiparmar4856 2 ปีที่แล้ว +1

    Thanks!

  • @RahulKushwah-sv9rh
    @RahulKushwah-sv9rh 3 ปีที่แล้ว +3

    Raj bhaiya rocks ☄☄☄ from beginning to this video I never felt that this is the same topic in which previously I faced a lot of problem to solved the question.

    • @takeUforward
      @takeUforward  3 ปีที่แล้ว +9

      Areh video th dekh lo :|

    • @RahulKushwah-sv9rh
      @RahulKushwah-sv9rh 3 ปีที่แล้ว

      Woh toh smj aa hi jayegi bhaiya aap Padhye ho😀

  • @epicsportsplay-c7w
    @epicsportsplay-c7w 11 หลายเดือนก่อน

    understood Sir .From DP Video 1 I was watching video in that mean time

  • @DhananjayKumar-bd2jg
    @DhananjayKumar-bd2jg 2 ปีที่แล้ว +3

    29:51 why we are taking size k+1 rather than k?

  • @anmol3749
    @anmol3749 หลายเดือนก่อน +1

    Understood
    Thank you striver🙌🙌

  • @rahulpothula1902
    @rahulpothula1902 2 ปีที่แล้ว +7

    Everything understood perfectly!! But a small doubt in tabulation: why did we directly write dp[0][arr[0]] = true without checking the condition if(arr[0] == k)???
    Pls pls pls answer if anyone knows....🙏

    • @aaryan3461
      @aaryan3461 2 ปีที่แล้ว

      same doubt

    • @codingachinilgtifirbhikrrh9009
      @codingachinilgtifirbhikrrh9009 2 ปีที่แล้ว +2

      it is a
      reminiscence of the base condition which we used in recursion i.e. if(i==0)return arr[0] = target

    • @georgemullarj
      @georgemullarj 2 ปีที่แล้ว +3

      dp[0][arr[0]] means n=0, means only 1 element i.e., arr[0] present in array and the target is arr[0]. Since target and element is same it is true. I feel 1 based indexing is more easy to understand, see Aadity verma videos for it.

    • @abhishekgururani6993
      @abhishekgururani6993 2 ปีที่แล้ว +5

      Listen, in your base case for recursion you had condition that when "index will be 0" and "value of arr[0] will be equal to target" you'll return true. In tabulation, dp is represented like this : dp[index][target], so the value of dp when "index equals 0 and target equals arr[0]" is true;

    • @tusharsahu397
      @tusharsahu397 2 ปีที่แล้ว

      Same Doubt...........as arr[0] can be any large value then how can we take it as index of a fixed size dp??

  • @sachinNotOut
    @sachinNotOut 11 หลายเดือนก่อน +1

    you have already explained this in recursion playlist i think and this time you solved this by combination sum problem pattern from that recursion playlist

  • @aman9633
    @aman9633 3 ปีที่แล้ว +7

    What if n=1,k=5 and arr[0]=10 ,when we are doing pre[arr[0]] ,as arr[0]>k won't it go out of bounds??

    • @takeUforward
      @takeUforward  3 ปีที่แล้ว +7

      Yes true, correctly pointer out. Thanks. For that reason we need to write another check condition.

    • @satyamraj2779
      @satyamraj2779 7 หลายเดือนก่อน

      or rather you can just do this
      for(int i = 0; i

  • @piyushsaxena6243
    @piyushsaxena6243 3 ปีที่แล้ว +2

    understood, this is the best dp playlist indeed

  • @Rohit-zk1lz
    @Rohit-zk1lz ปีที่แล้ว +9

    "what's bottom up ulta ulta"

  • @ramyasree4986
    @ramyasree4986 2 ปีที่แล้ว

    in recursion time complexity is always no of changing states and possibilities (all stuffs) this we further reduce from exponential using memorization and with tabulation we remove stack space and with space optimisation we do reduce array dimension woww!!!! so clear explanation

  • @amitghosh4548
    @amitghosh4548 3 ปีที่แล้ว +6

    I've submitted the Top-Down version with 1D memo and still got accepted...
    vector memo;
    bool knapSack(int i, int sum, int K, vector &A) {
    if (i < 0)
    return false;

    if (sum >= K)
    return sum == K;

    if (memo[i] != -1)
    return memo[i];

    if (knapSack(i - 1, sum + A[i], K, A) || knapSack(i - 1, sum, K, A))
    memo[i] = 1;

    return memo[i] == 1;
    }
    bool subsetSumToK(int N, int K, vector &A) {
    memo.assign(N, -1);
    return knapSack(N - 1, 0, K, A);
    }

    • @sushant8686
      @sushant8686 2 ปีที่แล้ว

      i don't how this is working because for index we two choices how will you know which choice is giving me right and which is giving wrong ?

  • @sairam3351
    @sairam3351 ปีที่แล้ว +1

    Understood, Thank you so much.

  • @snipercool4169
    @snipercool4169 2 ปีที่แล้ว +7

    [Java] Tabulation Solution :
    public class Solution {
    public static boolean subsetSumToK(int n, int k, int arr[]){
    // Declaring dp array.
    boolean dp[][] = new boolean[n + 1][k + 1];
    // If required sum = 0, answer always true.
    for (int i = 0; i

  • @dakshjainth3212
    @dakshjainth3212 6 หลายเดือนก่อน

    thank you sir for this amazing video and in-depth explanation "US"

  • @legendsoflife3955
    @legendsoflife3955 2 ปีที่แล้ว +4

    he tried to do little bit good but the main intuition of this approach is missing, I still feel Aditya Verma explained it in a more better way.

  • @radekszewczyk3603
    @radekszewczyk3603 9 หลายเดือนก่อน +1

    Understood! Thanks man!

  • @anything_jara_hatke5237
    @anything_jara_hatke5237 3 ปีที่แล้ว +7

    When I took a 2D global vector of size n*k max values i.e 1e3*1e9, I am getting Segment error. But when I don't define it globally and take it as a parameter of function, than it is working fine, can I get its explanation please.

  • @parthsalat
    @parthsalat 2 ปีที่แล้ว +1

    Understood!
    Now you can peacefully go back to sleep 😴

  • @parthsalat
    @parthsalat 2 ปีที่แล้ว +3

    Note that striver changed the color of the curtains behind him from this video onwards.
    Hence from now onwards, all remaining videos of the playlist are very imp

  • @a_05_himanshu_akula31
    @a_05_himanshu_akula31 ปีที่แล้ว +2

    in tabulation base case we gotta take care of the case where arr[0] > k else dp[0][arr[0]] will go out of bound since dp is set to range of 0 to k

    • @gudlaudaysai4571
      @gudlaudaysai4571 ปีที่แล้ว

      I am about to write this, glad you had asked it and i can confirm that my approach is correct

    • @vishious14
      @vishious14 ปีที่แล้ว

      Quick question. Can you explain why we are marking dp[0][arr[0]] as true.

    • @swapan6785
      @swapan6785 ปีที่แล้ว +1

      @@vishious14 try doing dry run and you will get it. Basically dp[0] means we are checking only till first element (0th index in arr) and answer would be true only if arr[0] = target, otherwise false.

  • @sujalgupta6100
    @sujalgupta6100 2 ปีที่แล้ว +3

    i am little bit confused . when and why do we take size = n+1 sometimes while making dp[n+1 ] and sometimes we only take dp[n]

    • @subhashpabbineedi7136
      @subhashpabbineedi7136 2 ปีที่แล้ว

      I think, if there is 1 based indexing we take n+1 or else n

    • @harishchandra8057
      @harishchandra8057 2 ปีที่แล้ว +1

      @@subhashpabbineedi7136 correct

    • @Codebreaker0702
      @Codebreaker0702 ปีที่แล้ว

      Did u get your answer ?

    • @sujalgupta6100
      @sujalgupta6100 ปีที่แล้ว

      @@Codebreaker0702 yes kunal , I take n+1 size everytime, because it works fine most of the time.

    • @deviprasad_bal
      @deviprasad_bal ปีที่แล้ว

      in this question you can take n instead of n+1 , it'll work. basically we decide that by looking at the range of indices covered. here it was from 0 to n-1 , hence it covered n indices and hence we declare it as
      vectordp( n , vector(k+1,-1);
      k + 1, because target ranges from 0 to k.

  • @priyanshuchouhan9845
    @priyanshuchouhan9845 ปีที่แล้ว +1

    I understood all the concepts that you taught in this lecture

  • @adityajain1205
    @adityajain1205 2 ปีที่แล้ว +4

    Bhaiya you said that if it gets a true in recursion , further recursion will not take place. But we are returning in the end so i think full recursion will take place . Correct me if i am wrong...

  • @priyanshuchouhan9845
    @priyanshuchouhan9845 ปีที่แล้ว +1

    the lecture was amazing . This took my concept of dp at next level.

  • @anything_jara_hatke5237
    @anything_jara_hatke5237 3 ปีที่แล้ว +3

    Value of k is max 1e9 and N is 1e3, I don't think we can take 2D array as dp instead of vector, right?

  • @disunique6107
    @disunique6107 2 ปีที่แล้ว +1

    Last one was greattt 🔥
    GOAT

  • @abdalla4425
    @abdalla4425 ปีที่แล้ว

    Did a dry run for the tabulation and space optimization that allowed me to understand the code, with a lil more practice, I will be able to come up with this without the video like how I did with recursion and the memoization solution! Thanks

  • @shubhrajit2117
    @shubhrajit2117 หลายเดือนก่อน +1

    At 14:53 instead of using or operator. We can evaluate _not_take_ first. If _not_take_ is true, we can directly return true without computing _take._ If _not_take_ is false we will return _take._ This short-circuiting can save a bit of computation.

  • @MukeshKumar-cc3uh
    @MukeshKumar-cc3uh ปีที่แล้ว

    Sir, you are amazing. Understood. ♥

  • @ritikshandilya7075
    @ritikshandilya7075 7 หลายเดือนก่อน

    Thanks Striver for great solution

  • @shivangpandey9943
    @shivangpandey9943 ปีที่แล้ว +2

    We can use a base case as if(target < 0) return false; this will help us to escape through edge case of bool take call

  • @aarushirai6374
    @aarushirai6374 3 ปีที่แล้ว

    Understood. Brilliantly explained. You clear the concepts to the core.

  • @hashcodez757
    @hashcodez757 6 หลายเดือนก่อน

    "UNDERSTOOD BHAIYA!!"

  • @105avniuplabdhee5
    @105avniuplabdhee5 ปีที่แล้ว

    understood

  • @SajanKumar-ec2us
    @SajanKumar-ec2us 9 หลายเดือนก่อน

    understood ! **please discuss in sort video how you became a expert coder?

  • @bahveshjain1730
    @bahveshjain1730 2 ปีที่แล้ว

    understood bhaiya becoz of u i am able to solve dp questions easily now .

  • @boomburstshorts2347
    @boomburstshorts2347 ปีที่แล้ว

    why we have taken target + 1 while constructing vector .......dp ?

    • @mridul.7183
      @mridul.7183 ปีที่แล้ว

      because else only we will be able to store till target-1. but to store till target, we took target+1.

  • @minhthang93
    @minhthang93 ปีที่แล้ว

    To more simplify the recursion to easy to understand:
    private static boolean recursion(int index, int target, int[] arr) {
    if (target == 0) return true;
    if (index < 0) return false;
    if (target < 0) return false;
    boolean take = recursion(index-1,target-arr[index],arr);
    boolean notTake = recursion(index-1,target,arr);
    return take || notTake;
    }
    But the way Striver do is help you save some recursion call -> his code will faster

  • @abhijitbandgar8112
    @abhijitbandgar8112 ปีที่แล้ว +1

    Understood raj sir

  • @priyanshuchouhan9845
    @priyanshuchouhan9845 ปีที่แล้ว

    this is the amazing dp journey to me.

  • @anikethdeshpande8336
    @anikethdeshpande8336 2 ปีที่แล้ว

    best explanation.... drawing recursion tree really helps understand better !

  • @shreyashtech8556
    @shreyashtech8556 10 หลายเดือนก่อน

    bro doing gods work

  • @karthikmg3325
    @karthikmg3325 ปีที่แล้ว

    Happy Teacher's day to Striver ❤🎉

  • @ntgrn-pr5yx
    @ntgrn-pr5yx 3 หลายเดือนก่อน

    understood, thank you striver

  • @mrinmoysaikia6223
    @mrinmoysaikia6223 25 วันที่ผ่านมา

    Heres a 1D DP recursive approach . Although I thought that to convert this into tabulation we need a 2D DP approach but with the help of chatgpt I was able to find a better solution using 1D DP space optimized .
    code in CPP
    Tabulation 1D space optimized :
    bool isSubsetSum(vector& arr, int target) {
    int n = arr.size();
    vector dp(target + 1, false);
    dp[0] = true; // Base case: A sum of 0 is always possible
    for (int i = 0; i < n; i++) {
    for (int j = target; j >= arr[i]; j--) {
    dp[j] = dp[j] || dp[j - arr[i]];
    }
    }
    return dp[target];
    }
    Memoization 1D :
    bool func(vector& arr, int target,int ind,vector& dp){
    if(target==0){
    return true;
    }
    if(target

  • @Pandey_Puja
    @Pandey_Puja ปีที่แล้ว +1

    I didnt understand the logic behind below line of code
    Please note that it can happen that arr[0]>target, so we first check it: if(arr[0]

  • @AngadSingh97
    @AngadSingh97 ปีที่แล้ว

    Thank you Striver bhai..

  • @vikasbagri1225
    @vikasbagri1225 2 ปีที่แล้ว

    understood
    this and the last question were not easy

  • @Morimove
    @Morimove ปีที่แล้ว

    bhaiya aapko matrix table bana ke samjana chaiye tha. memoization mei sirf matrix bana dene se solve toh ho gaya bas samj hi nahi aaya ki kaise ho raha hai. laga jaise jaadu ho raha hai. fir kisi aur ki video dekhi toh pata lga ki kaise matrix table mei values fill hoti jaati hai aur subproblems hat jaate hai. space otimized vala bhi tabhi samj aaya jab matrix table bana ke dekhi.
    baki aap acha content toh banate hi ho toh keep going. 😄

  • @rounakraj6276
    @rounakraj6276 3 ปีที่แล้ว +1

    understood
    also the minor change in the last part of video is imp
    as it gives runtime error on leetcode if it is not changed.

    • @rounakraj6276
      @rounakraj6276 2 ปีที่แล้ว

      @Arjun search subset sum equal to target leetcode ...
      U will find the similar ques

    • @koushikvss7638
      @koushikvss7638 2 ปีที่แล้ว

      Is the corresponding question on leetcode 560. subarray sum equals K?

  • @FanggeX
    @FanggeX ปีที่แล้ว

    Very helpful! Thank you very much!

  • @ScienceSeekho
    @ScienceSeekho 2 ปีที่แล้ว

    For tabulation, In second for loop why are we going upto target?
    for(int ind = 1; ind

    • @manishkumar-nh9jo
      @manishkumar-nh9jo 2 ปีที่แล้ว

      because array indexing is from 0 to n-1 for n sized array. here row represents the index of the array and col represents the target.

  • @shauryatomer1058
    @shauryatomer1058 4 หลายเดือนก่อน

    thanks for this amazing content

  • @madhav3444
    @madhav3444 2 ปีที่แล้ว +1

    Why you started the outer for loop from index 1 to n and not 0 to n in the tabulated dp calculation 31:33 ? , I know it will give Runtime error but I am not getting intutuion for this. Thanks

  • @rushyya
    @rushyya ปีที่แล้ว

    UNDERSTOOD! THANK YOUUU

  • @MayankLC93
    @MayankLC93 2 ปีที่แล้ว

    space optimization is out of world !!!!!!!!!!!!😂😂😂 Aweosme Explanation ..

  • @azizazmir2159
    @azizazmir2159 ปีที่แล้ว

    Words of striver matter more than looking screen ❤

  • @saitejanedunoori5451
    @saitejanedunoori5451 17 วันที่ผ่านมา

    Understood thanks bhai

  • @kathanvakharia
    @kathanvakharia ปีที่แล้ว

    Understood...Completed 14/56

  • @deonarayanchoudhari5237
    @deonarayanchoudhari5237 2 ปีที่แล้ว +1

    Understood and Thank You Striver!!

  • @soubhikghosh6564
    @soubhikghosh6564 2 ปีที่แล้ว

    Best DP series so far

  • @udayprakashharsh2805
    @udayprakashharsh2805 ปีที่แล้ว +2

    Understood but having a slight doubt
    shouldnt we add
    if(notTake) dp[n][k] = true;
    as it is goona save us a lot of recursive calls
    if target is less than arr[n] thenpick call will be called even though there is not need for it

  • @dharmeshpoladiya9047
    @dharmeshpoladiya9047 2 ปีที่แล้ว

    Understood 💯💯 Great Explanation. Thank you very much for all you efforts🔥🔥

  • @iamokpara
    @iamokpara ปีที่แล้ว

    You are awesome. Understood!!

  • @Hrushi_2000
    @Hrushi_2000 ปีที่แล้ว

    Understood. Thankyou sir

  • @tomekwilk6252
    @tomekwilk6252 4 หลายเดือนก่อน

    I'm after recursion playlist, and now going through DP. I must say tabulation in this one, is very hard for me...

  • @viraj701
    @viraj701 8 หลายเดือนก่อน +1

    can we use the combination sum ii (recursion L-9) approach to solve this problem using dp?

  • @geetanjalikarma958
    @geetanjalikarma958 ปีที่แล้ว

    Understood!!
    Thank you