DP 18. Count Partitions With Given Difference | Dp on Subsequences

Поділитися
Вставка
  • Опубліковано 1 сер 2024
  • Lecture Notes/C++/Java Codes: takeuforward.org/dynamic-prog...
    Problem Link: bit.ly/3r8mG5b
    Pre-req for this Series: • Re 1. Introduction to ...
    a
    Make sure to join our telegram group for discussions: linktr.ee/takeUforward
    Full Playlist: • Striver's Dynamic Prog...
    In this video, we solve the problem of count partitions with given difference. This problem is the fifth problem on DP on Subsequences Pattern. Please watch DP 17 before watching this.
    If you have not yet checked our SDE sheet, you should definitely do it: takeuforward.org/interviews/s...
    You can also get in touch with me at my social handles: linktr.ee/takeUforward

КОМЕНТАРІ • 599

  • @takeUforward
    @takeUforward  2 роки тому +119

    I need your support, and you can do that by giving me a like, and commenting "understood" if I was able to explain you.
    Keeping a like target of 500 ❤✌🏼

  • @AbhishekKumar-cv1dh
    @AbhishekKumar-cv1dh 8 місяців тому +39

    I'll be honest, I was bamboozled with the 0's in array edge case since DP17 and I was simply unable to find a clear answer from the comments. Had I simply closed my eyes and went ahead with DP 18, I would have legit saved ~ 2 hours of confusion!!
    Thankyou so much Striver, this lecture cleared all my doubts 🔥🔥🔥🔥🔥

    • @mayanksingh7501
      @mayanksingh7501 3 місяці тому +6

      Those confusion and doubts and 2 hours will only help in longer run. Good work on not directly jumping to another video without clearing your doubts on your own.

    • @after_dark_777
      @after_dark_777 2 місяці тому +1

      for real should have moved on to this video those comments were so confusing

    • @SamreenAftab-lg8tx
      @SamreenAftab-lg8tx Місяць тому

      Samee

    • @solitucedagar4298
      @solitucedagar4298 26 днів тому

      sameeeeeeeeeeee

  • @saketsoni2587
    @saketsoni2587 Рік тому +48

    I studied DP from aditya verma, but was never able to figure out how to handle the zeros in the array, you made it super easy, Thanks!

    • @entertainmenthub373
      @entertainmenthub373 9 місяців тому +5

      but aditya verma always tell you the in=dentification and where u can use this apparoach nd similar questions he is the god of cp ik he skip the case of 0 in array but aditya verma is for cp where u can use which approach and how to identify which approach by seeing solution

    • @iamnoob7593
      @iamnoob7593 7 місяців тому +4

      @@entertainmenthub373 God of cp is tourist.

    • @divyanshrawat2859
      @divyanshrawat2859 Місяць тому

      its not like he was not able to figure out , he always gives an intution to solve the problem , not like come and tells you the whole solution.

  • @nikhilmadaan29
    @nikhilmadaan29 Місяць тому +4

    hats off man,, spent 2 hours on DP17 to fix that but after watching this DP 18 everything went super smooth

  • @cs26divyanshisachan37
    @cs26divyanshisachan37 6 місяців тому +1

    Understood! Hats off to ur dedication, u are still teaching while suffering from fever.

  • @PIYUSH61004
    @PIYUSH61004 2 роки тому +36

    The deduction of (totalSum - D) / 2 was amazing. Understood!

  • @saurabhsaha6958
    @saurabhsaha6958 4 місяці тому +1

    Striver's concept explanation is so cool, easy and easily get stuck into the head. I wish to meet him one day and say a lot of thanks to him.

  • @Aniruddha_Chowdhury
    @Aniruddha_Chowdhury 2 місяці тому +5

    understood until 14:00 ❤ .
    Will learn the optimization later

  • @tarunrao1505
    @tarunrao1505 Рік тому +10

    Hello,
    The tabulation code is not passing all test cases in both videos dp-17 && dp-18. Is anyone facing the same problem. Pls HELP.

  • @parthsalat
    @parthsalat 2 роки тому +3

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

  • @narendramaurya4823
    @narendramaurya4823 4 місяці тому

    Us, but the way you transformed the problem into previously solved problem is amazing , that's the way we have to think ... Thanks ❤

  • @ScienceSeekho
    @ScienceSeekho 2 роки тому +7

    understood. Also thanks for explaining Space Optimization so good. I am from tier-3 mechanical never knew all these stuff

  • @stith_pragya
    @stith_pragya 7 місяців тому +1

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

  • @thatsharma1066
    @thatsharma1066 Місяць тому

    I was confused with the previous video 0 case, but now understood. Thanks.

  • @vaibhavrai7042
    @vaibhavrai7042 День тому

    To deal with the 0 case, we can also take the dp array to be of size [n+1][sum+1] and initialize the dp[n][0]=1
    int[][] dp = new int[n+1][sum+1];
    dp[n][0]=1;
    for(int index=n-1;index>=0;index--)

  • @chetanthakral5322
    @chetanthakral5322 2 роки тому +70

    Another modified target could be (difference + totalSum)/2;
    To explain this how this came is :
    s1= sum of elements in subset 1
    s2 = sum of elements in subset 2
    s1 - s2 = d (We need to find 2 subsets with difference d )
    s1 + s2 = totalSum (We know the sum of 2 subsets would be equal to the total sum of array)
    Adding these 2 equations , we get s1 = (d + totalSum)/2, thus we only need to find a subset with sum s1.

    • @takeUforward
      @takeUforward  2 роки тому +75

      But this will increase the space req :)

    • @chetanthakral5322
      @chetanthakral5322 2 роки тому +9

      @@takeUforward Oh Okay , I didn't think about that !

    • @varunaggarwal7126
      @varunaggarwal7126 Рік тому +1

      @@chetanthakral5322 lol, I thought the same thing, but its not pure math its cs.

    • @UCSParnashreeDas
      @UCSParnashreeDas Рік тому

      @@varunaggarwal7126 how this increases the space.. can u explain

    • @varunaggarwal7126
      @varunaggarwal7126 Рік тому +1

      @@UCSParnashreeDas it's been 1 month,lol i have to revise this dp, but I guess you can see + sign while striver is subtraction, means less

  • @MukeshKumar-cc3uh
    @MukeshKumar-cc3uh 4 місяці тому

    Understood 👍. Hats off to your dedication for us. ♥

  • @tasneemayham974
    @tasneemayham974 10 місяців тому

    UNDERSTOOODD!!!
    Thank you, Striver!!

  • @ritikshandilya7075
    @ritikshandilya7075 Місяць тому

    Great Explanation Striver , Thanks

  • @gauravgogoi5240
    @gauravgogoi5240 3 місяці тому

    After this video, they updated the problem! Real influencer

  • @pulkitchausali1354
    @pulkitchausali1354 Рік тому +13

    Already understood before starting of video that's what Striver teaches us

  • @DevashishJose
    @DevashishJose 7 місяців тому

    understood. Thank you so much

  • @anveshkarra3861
    @anveshkarra3861 2 роки тому +2

    understood , the space optimization is amazing sir

  • @soumik5854
    @soumik5854 7 днів тому

    solved this problem on my own very proud of this

  • @adebisisheriff159
    @adebisisheriff159 7 місяців тому

    Understood! Striver. The best Software Engineer himself

  • @TON-108
    @TON-108 10 місяців тому

    Understood Bhaiya!

  • @blackblood181
    @blackblood181 Рік тому +3

    we can also use :
    if(ind < 0){
    if(sum==0) return 1;
    return 0;
    }
    apart from these conditions:
    if(ind == 0) {
    if(sum==0 || num==arr[0]) return 1;
    if(sum==0 && arr[0]==0) return 2;
    return 0;
    }

    • @anuragprasad6116
      @anuragprasad6116 Рік тому

      this makes the code really simple to understand. perfect base case.

    • @theterror9080
      @theterror9080 11 місяців тому

      Best Bhai
      @@anuragprasad6116

    • @manojnandhan8677
      @manojnandhan8677 5 днів тому

      but how will you handel -1 index in tabulation?

  • @hrushikesh-1914
    @hrushikesh-1914 10 місяців тому

    Understood. Thankyou sir.

  • @shreyashtech8556
    @shreyashtech8556 4 місяці тому

    bro doing gods work

  • @hashcodez757
    @hashcodez757 19 годин тому

    "UNDERSTOOD BHAIYA!!"

  • @ranasauravsingh
    @ranasauravsingh 2 роки тому +1

    UNDERSTOOD... !
    Thanks striver for the video... :)

  • @ankanbasu7381
    @ankanbasu7381 2 роки тому +18

    4:48 or I think, we can go 1 step deeer into indx = -1
    then base case would be simpler
    if (indx == -1) {
    if (sum == 0) return 1;
    else return 0;
    }

    • @introvert9112k
      @introvert9112k Рік тому +1

      Then how do you take care of base case in Tabulation. As dp array cannot have -ve indexes.

    • @RTXCR7
      @RTXCR7 Рік тому +4

      @@introvert9112k for that i think we would need to make 1 indexed arrays of size n+1 having an extra 0 index free

  • @cinime
    @cinime 2 роки тому

    Understood! Thank you so so so much!!!

  • @priyankabagal9269
    @priyankabagal9269 2 роки тому +2

    You have literally made dp look so easy !

  • @balajisrinivasan6618
    @balajisrinivasan6618 Рік тому +8

    Thank you striver ! Just a note : writing recursion from 0 to n-1 looks far easier to handle bases cases than writing recursion from n-1 to 0 on subsequence problems

    • @santoshpokhrel7693
      @santoshpokhrel7693 10 місяців тому +2

      but for me it creates problem while writing the tabulation form. Esp. with all the subsequences questions.

    • @chase.2595
      @chase.2595 9 місяців тому

      yeah man, we have to start from n-2 if we do 0 to n-1 in recursion@@santoshpokhrel7693

    • @ganeshktvb9234
      @ganeshktvb9234 6 місяців тому

      yaa bro really it creates confusion in tabulation
      @@santoshpokhrel7693

  • @aps8874
    @aps8874 19 днів тому

    Thank you so much!

  • @shoryapawar2219
    @shoryapawar2219 10 місяців тому

    Understood
    Thanks Striver for this Dp series

  • @sonicboom6635
    @sonicboom6635 8 місяців тому +1

    In the space optimized solution why the loop sum=1 to target doesn't work as we have been doing previously and setting curr[0] =1 since for any index with target as 0 there is only single subset. Can someone explain please?

  • @shriRadheHariom
    @shriRadheHariom 12 днів тому

    Understood, well explained.

  • @mrinmoyhalder7293
    @mrinmoyhalder7293 2 роки тому

    hey can anyone please clear my doubt. I'm applying DP-16 concept.like after filling the tabulation with boolean, check and try for every s1, that it's possible to get standing on last index, if possible then calculate s2 and check the condition given in the qsn and increment count, Now this method is not working, I think it's because the tabulation is not recording duolicacy, e.g, In array if the sum 7 is made by more than one way, then it's not taking that record, and while checking for (s1>s2 && s1-s2==d), only once the count is increasing,
    is it the actual reason of failing ?

  • @ratinderpalsingh5909
    @ratinderpalsingh5909 2 роки тому

    Understood, sir. Thank you very much.

  • @musichub2168
    @musichub2168 2 роки тому +1

    Understood 💯💯Great Explanation

  • @itsmepratham2712
    @itsmepratham2712 Рік тому +2

    For Those who did not understand why total sum-d has to be even so imagine totalsum=15 and d=2 now count s2=(15-2)/2 it will give s2=6; ans s1-s2=d so s1=2+6=8 now here it is said that s1+s2=totalsum but s1+s2=14 which is not equal to total sum to total sum-d has to be even

  • @arpitrajput6424
    @arpitrajput6424 2 роки тому +5

    In Lecture 17 , we can sort the vector and reverse it, then no need to change base case it will work absolutely fine.

    • @riddhibandyopadhyay584
      @riddhibandyopadhyay584 2 роки тому +4

      Yes, but it will take extra time complexity

    • @arpitrajput6424
      @arpitrajput6424 2 роки тому +4

      @@riddhibandyopadhyay584 ya you're right but can be done ✅ with this approach .👍

  • @kushjoshi9716
    @kushjoshi9716 Рік тому

    Nicely Explained! Understood!

  • @user-lw9dj8we7k
    @user-lw9dj8we7k 10 місяців тому

    Understood Sir.

  • @andrewcenteno3462
    @andrewcenteno3462 Місяць тому

    That algebra at 10:15 is crazy I would never see that under the time constraints of a real interview. It's brilliant tho

  • @champu5645
    @champu5645 2 роки тому +2

    I thing the simplest way to get rid of so many conditions of 0's we can simply start the recursion for 0 to n-1; then we will get correct ans i.e.4;

    • @nithish_raina
      @nithish_raina Рік тому +1

      Yes, and it would also work even if the array doesn't contains any zeroes.. The base cases are also so simple to handle over here.

  • @ramyasree4986
    @ramyasree4986 2 роки тому

    completed subsequences set problems great learning

  • @prabhakaran5542
    @prabhakaran5542 5 місяців тому +1

    Understood ❤

  • @abhijeetbasfore6816
    @abhijeetbasfore6816 2 роки тому

    Thank you so much I've understood

  • @akashkumarsingh3595
    @akashkumarsingh3595 2 роки тому +1

    If we have handled the case num[0] == 0 previously then why we are checking it again for num[0]

  • @Lyrics_dunya
    @Lyrics_dunya 5 місяців тому +1

    For Problem 17 , I struggled a bit in Tabulation while writing the base cases for the new changes.
    All 3 cases covered, also notice the bases cases are written in reverse order, so that the priority is given to the last one if its true.
    One more thing since we are considering the case for i = 0, please start the 2nd loop of target from 0 till k(inclusive). Happy learning!
    dp[0][0] = 1
    if arr[0]

    • @TyagiAviral
      @TyagiAviral Місяць тому

      Hey, thank you. Great comment.

  • @user-ve4jm9pj3s
    @user-ve4jm9pj3s Місяць тому +1

    another base case(Better and Concised):
    if(ind

  • @akr1831
    @akr1831 2 роки тому +8

    Thankyou very much for explaining base case of last question. I was stacked for last 6 hours. ❤️❤️

  • @arinmodi8884
    @arinmodi8884 2 роки тому +1

    Hey, Striver I understood the logic in this but how are you able to think of using logic like this very quickly ? , i didn't get that by looking at the question.

  • @ShahNawaz-cx3pi
    @ShahNawaz-cx3pi Місяць тому +1

    *********** Iterative Code for the count number subsequence whose sum is k ( & 0

  • @harisrashid0773
    @harisrashid0773 2 роки тому

    int gfg the case where 0 can be in the begining can be solved by sorting given array in decreasing order but this will increase time compl,but will still pass test cases;

  • @firstac3506
    @firstac3506 3 місяці тому

    Understood 🔥🔥

  • @UECAshutoshKumar
    @UECAshutoshKumar Місяць тому +1

    Understood!

  • @rohandevaki4349
    @rohandevaki4349 Рік тому +1

    at 15:53 , the target should run from 1 to sum right? we have run from 1 to sum in the count subsequences with sum k also, why did you take from 0 to sum?

  • @stain0p101
    @stain0p101 10 місяців тому

    Thank you striver, made it super easy and interesting to learn DP. "UNDERSTOOD" 💓💓

  • @madmaxgaming5864
    @madmaxgaming5864 11 місяців тому

    just mind blowing how you came up with the modified target, kyse kar lete ho bhaiya?

  • @rahulprasad3575
    @rahulprasad3575 Рік тому

    what we do in case of negative elements if its given?

  • @gunduboinadileep9523
    @gunduboinadileep9523 8 місяців тому

    understood!

  • @harshitsharma5647
    @harshitsharma5647 Рік тому +3

    Superb Bhaiya
    guys watch at 10:10
    Amazing Concept
    Again and again Thankyou bhaiya Aka Striver

  • @jk-sm6qr
    @jk-sm6qr 2 місяці тому

    Thank you

  • @tallalhabib4526
    @tallalhabib4526 Рік тому +2

    What if we find with target = totalsum
    Then at n-1 iteration of tabulation find S1 and S2 by totalsum - S1.
    Then If S1>=S2 and S1-S2=D we can return True else False

  • @khushigupta5798
    @khushigupta5798 6 місяців тому +1

    UNDERSTOOD

  • @shaiksuhel6505
    @shaiksuhel6505 2 місяці тому

    Understood🎉

  • @nehakaushik3602
    @nehakaushik3602 2 роки тому

    OMG bhaiya ...simple "genius"

  • @AshishYadav-ql3up
    @AshishYadav-ql3up 5 днів тому

    loved it

  • @sanskarjaiswal4394
    @sanskarjaiswal4394 9 місяців тому

    Instead of changing the code we can just add a if statement before "take" variable that if arr[index]== 0 then skip it...

  • @Parthj426
    @Parthj426 Місяць тому

    us
    But i got confused as in DP 18 ques , it is written that two partitions have their union as Whole array . It should have been given that both are exclusive of each other , for being self-explanatory well.

  • @rechinraj111
    @rechinraj111 2 роки тому

    You have expressed S1 in terms of S2 then solved this problem. Can we do vice versa then solve this problem?

  • @techietech7073
    @techietech7073 Рік тому +2

    for DP 17
    for [ 7,1,0,2,5] with tar=7
    Method 1: originalAns*(pow(2,n))
    Method2: Changes in base case will that work? I can see from recursion tree there would be redundant calls at level where 0 is considered

    • @YatriSpecial
      @YatriSpecial Рік тому

      How do I write the base case in tabulation, Could you please tell me?

    • @nithish_raina
      @nithish_raina Рік тому

      Method 1 is time intensive if let's say the no of zeroes were 15-20 in an array...Hence method 2 with handling zero in the base cases is required at such cases.

  • @anshugangwar7344
    @anshugangwar7344 2 роки тому

    Calculating Max Sum of Array with the following condition, If A[i] element contributing in max sum,than you can't consider A[i]-1 and A[i]+1 element for max sum contribution, if present in array .
    Note: Elements of the array can be repeated multiple times. It's unsorted. It can have 1 to n number of element.
    eg:
    int A[ ]={1,6,7,1,2,3,3,4,5,5,5,6,9,10};
    If I consider 10 as contributing max sum, I can consider 9 and 11. (Here 11 is not present but 9 is present still we can’t consider it).
    If I consider 5 (total max sum contribution 5*3) but can’t consider 4 and 6.
    I have tried sorting and storing index and count in the ordered map. Also try to compare with unbounded knapsack criteria.
    Still, I was struggling with an optimal and clear idea to calculate. Any idea how to approach it .

    • @user-nz1nq2el4r
      @user-nz1nq2el4r Рік тому

      Create an array dp of size n, where n is the length of the input array A. Initialize all elements of dp to 0.
      Sort the input array A in ascending order to simplify the comparison process.
      Iterate through each element A[i] in the sorted array A.
      For each element A[i], update the maximum sum at index i in the dp array based on the following condition:
      If A[i] is the first occurrence in the sorted array or A[i-1] and A[i+1] are not present in the sorted array, then set dp[i] to dp[i-1] + A[i].
      Otherwise, set dp[i] to the maximum value between dp[i-1] (excluding A[i]) and dp[i-2] + A[i] (including A[i]).
      After iterating through all elements in the sorted array, the maximum sum will be the maximum value in the dp array.

  • @swagcoder
    @swagcoder 10 місяців тому +1

    Can anyone please explain why target is starting from 0 here? in all other problems it's starting from 1. If I take 1, some test cases are failing

  • @gauravgogoi5240
    @gauravgogoi5240 3 місяці тому

    15:00 the most important point to be noted if you are in an intervie

  • @aryanagrawal4794
    @aryanagrawal4794 2 роки тому +13

    bhaiya in count subset problem which u had taken earlier , in tabulation the loop started from 0 to sum but when sum==0 it has been handled previously right? then it should start from 1 right? as in problem subset sum==k u started the sum loop from 1 to sum as for sum==0 we have handled it previously before the loop.

    • @takeUforward
      @takeUforward  2 роки тому +7

      Yes u can, won’t be an issue :)

    • @aryanagrawal4794
      @aryanagrawal4794 2 роки тому +1

      @@takeUforward yes i did that in the count subsets problem, but when I did that in the current problem of partition i.e. looping from 1 to sum it's giving WA, but when i changed to 0 to sum it's giving correct and. Why so?

    • @takeUforward
      @takeUforward  2 роки тому +3

      @@aryanagrawal4794 because in partition at 0 there are other cases to handle. Here at 0, its take and notTake, hence

    • @aryanagrawal4794
      @aryanagrawal4794 2 роки тому +1

      @@takeUforward ok bhaiya got it.

    • @madhurnarang2440
      @madhurnarang2440 2 роки тому

      @@aryanagrawal4794 Hey can you explain it to me?

  • @sahilarya9510
    @sahilarya9510 2 роки тому +5

    please tell us the time when this amazing course will get end......expected time??

  • @the_shridhar
    @the_shridhar 3 місяці тому

    just add this in previous question:
    ```
    if (i < 0)
    {
    return !target;
    }
    ```

  • @drishtirai864
    @drishtirai864 4 місяці тому

    Understood !!

  • @001_abhijeetkumar7
    @001_abhijeetkumar7 2 місяці тому

    why return 0 case is not considered in base case of tabulation?

  • @user-zf6cz2th3s
    @user-zf6cz2th3s 6 місяців тому +1

    understood

  • @manishisaxena5657
    @manishisaxena5657 Рік тому +9

    actually we can make the base case as
    if(index == -1) {
    if(tar == 0) return 1;
    return 0;
    }

    • @anuragprasad6116
      @anuragprasad6116 Рік тому +2

      underrated! taking this as a base case really simplifies the solution.

  • @VikasGupta-ok9lh
    @VikasGupta-ok9lh Рік тому +2

    In that case my recursive code was going from 0 to n-1 and to avoid case of zero I sorted my array hence all the zero cases were sorted

    • @inderjotsingh5868
      @inderjotsingh5868 Рік тому +1

      you don' t even need this , just go from 0 -> n , and if at n , target == 0, return 1 else 0 , all other cases are already been taken care off , if you do in this way .
      How ?
      our code will do this will we are making the recursive calls at n-1

  • @per.seus._
    @per.seus._ 29 днів тому

    understoooooooood

  • @studynewthings1727
    @studynewthings1727 4 місяці тому

    understood😃

  • @learnandteach3527
    @learnandteach3527 5 місяців тому

    amazing

  • @SethuIyer95
    @SethuIyer95 4 місяці тому

    Understood.

  • @SatyamKumar-bw4vi
    @SatyamKumar-bw4vi 8 місяців тому

    Hare Krishna..!! understood.

  • @affanrahman5711
    @affanrahman5711 2 роки тому +2

    In lecture 17, can we handle the cases having zeroes by just multiplying our previous answer with pow(2,n) where n is the no. of zeroes

  • @uddalakseal9320
    @uddalakseal9320 7 місяців тому

    Can anyone explain why are we always initializing the DP[0][i] with val[0]:
    for(int i = weight[0];i

  • @sujalgupta6100
    @sujalgupta6100 Рік тому

    Understood. Best on whole yt.

  • @himanshuagrawal8012
    @himanshuagrawal8012 2 роки тому

    as we are handing separately so now we need our TARGET LOOP should start from 0...correct ??

  • @mayankmalhotra21
    @mayankmalhotra21 Рік тому

    if someone is going from 0 to n
    if(i==arr.length)
    {
    if(tar==0) return 1;
    else return 0;
    }
    this will handle the case for zero (1, 0,0 ) will give -> 4 (if tar = 1)

  • @ankit_1012
    @ankit_1012 Рік тому

    Wouldn't it be better to have one more recurssive call and check if ind == -1 then check if target==0 return1 else 0 it would remove the return 2 and other if condiditons althought we are having 2 more recurssive calls but still it makes the code look cleaner and similarly in tabulation we can iterate over j loop from 0

  • @sushrutasengupta1273
    @sushrutasengupta1273 2 місяці тому

    If we had added the equations then s=T+D/2 would've happened which would remove requirements of ec 1

  • @sameersahu4569
    @sameersahu4569 2 роки тому

    Understood!!Thank you