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 ❤✌🏼
@iamnoob7593 Жыл бұрын
understood
@himalayadebbarma-we4pt6 ай бұрын
Understood
@shubhamshukla42154 ай бұрын
what if test case in dp17 is like {2, 0 , 0 , 4 , 2 ,2} and sum = 4 , then will this solution work ? i guess at the time whenever we found sum == 0 at index > 0 , then we have to calculate number of zero till index == 0 let's suppose it is z , and then retum 2^z . What everyone think about it ?
@AbhishekKumar-cv1dh Жыл бұрын
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 🔥🔥🔥🔥🔥
@mayanksingh75019 ай бұрын
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_7778 ай бұрын
for real should have moved on to this video those comments were so confusing
@SamreenAftab-lg8tx7 ай бұрын
Samee
@solitucedagar42986 ай бұрын
sameeeeeeeeeeee
@nikhilmadaan297 ай бұрын
hats off man,, spent 2 hours on DP17 to fix that but after watching this DP 18 everything went super smooth
@mohaksharma141218 күн бұрын
lol same it was worth it though
@saurabhsaha695810 ай бұрын
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_Chowdhury8 ай бұрын
understood until 14:00 ❤ . Will learn the optimization later
@saketsoni2587 Жыл бұрын
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 Жыл бұрын
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 Жыл бұрын
@@entertainmenthub373 God of cp is tourist.
@divyanshrawat28597 ай бұрын
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.
@saumyasharma99932 ай бұрын
aditya vermas approach works with zeroes as well, as in that we subtract dp[i-1][j-arr[i-1]]
@cs26divyanshisachan37 Жыл бұрын
Understood! Hats off to ur dedication, u are still teaching while suffering from fever.
@pulkitchausali13542 жыл бұрын
Already understood before starting of video that's what Striver teaches us
@PIYUSH610042 жыл бұрын
The deduction of (totalSum - D) / 2 was amazing. Understood!
@narendramaurya482310 ай бұрын
Us, but the way you transformed the problem into previously solved problem is amazing , that's the way we have to think ... Thanks ❤
@gauravgogoi52409 ай бұрын
After this video, they updated the problem! Real influencer
@adebisisheriff159 Жыл бұрын
Understood! Striver. The best Software Engineer himself
@stith_pragya Жыл бұрын
UNDERSTOOD.........Thank You So Much for this wonderful video...............🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻🙏🏻
@chetanthakral53223 жыл бұрын
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.
@takeUforward3 жыл бұрын
But this will increase the space req :)
@chetanthakral53223 жыл бұрын
@@takeUforward Oh Okay , I didn't think about that !
@varunaggarwal7126 Жыл бұрын
@@chetanthakral5322 lol, I thought the same thing, but its not pure math its cs.
@UCSParnashreeDas Жыл бұрын
@@varunaggarwal7126 how this increases the space.. can u explain
@varunaggarwal7126 Жыл бұрын
@@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
@balajisrinivasan6618 Жыл бұрын
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 Жыл бұрын
but for me it creates problem while writing the tabulation form. Esp. with all the subsequences questions.
@chase.2595 Жыл бұрын
yeah man, we have to start from n-2 if we do 0 to n-1 in recursion@@santoshpokhrel7693
@ganeshktvb9234 Жыл бұрын
yaa bro really it creates confusion in tabulation @@santoshpokhrel7693
@ankanbasu73812 жыл бұрын
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 Жыл бұрын
Then how do you take care of base case in Tabulation. As dp array cannot have -ve indexes.
@RTXCR7 Жыл бұрын
@@introvert9112k for that i think we would need to make 1 indexed arrays of size n+1 having an extra 0 index free
@vaibhavrai70426 ай бұрын
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--)
@anonymous-p4mАй бұрын
The lecture is awesome as always. Thank you so so much for making these videos even when you are sick. You inspire me to work hard. Thank you again :)
@itsmepratham2712 Жыл бұрын
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
@molymusic11888 ай бұрын
thankyou my guy🙌
@blackblood181 Жыл бұрын
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 Жыл бұрын
this makes the code really simple to understand. perfect base case.
@theterror9080 Жыл бұрын
Best Bhai @@anuragprasad6116
@manojnandhan86776 ай бұрын
but how will you handel -1 index in tabulation?
@harshitsharma56472 жыл бұрын
Superb Bhaiya guys watch at 10:10 Amazing Concept Again and again Thankyou bhaiya Aka Striver
@mohaksharma141218 күн бұрын
Thanks to striver i could come up with using DP-17 by my own including the edge cases
@Sneha-gb7iq4 ай бұрын
For tabulation, we can do dp[0][0]=1 and dp[0][nums[0]]+=1 Without checking for all cases
@AmanBawane-o9q7 ай бұрын
another base case(Better and Concised): if(ind
@gauravgogoi52409 ай бұрын
15:00 the most important point to be noted if you are in an intervie
@anmol3749Ай бұрын
Understood Thank you striver🙌🙌
@champu56452 жыл бұрын
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_raina2 жыл бұрын
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.
@VinayKumar-xs6el4 ай бұрын
can u share the code here please that starts from 0 & ends at n-1
@champu56454 ай бұрын
@@VinayKumar-xs6el will share soon, i also have to check where i have written the code. It's been 2 years
@soumik58546 ай бұрын
solved this problem on my own very proud of this
@MukeshKumar-cc3uh11 ай бұрын
Understood 👍. Hats off to your dedication for us. ♥
@dharmeshpoladiya90472 жыл бұрын
Understood 💯💯Great Explanation. Thank you very much for all you efforts🔥🔥
@Lyrics_dunya11 ай бұрын
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]
@TyagiAviral7 ай бұрын
Hey, thank you. Great comment.
@parthsalat2 жыл бұрын
Guys! For DP 17, Memoization code, striver's approach is correct (6:38), but here's a cleaner alternative for the base case: if(ind
@abhishekgururani69932 жыл бұрын
It'll be hard to convert this base case to tabulation dp states as it's not well defined wrt the indices.
@parthsalat2 жыл бұрын
@@abhishekgururani6993 You're right. But the tabulation base cases are straightforward and simple. One can write that by applying basic logic.
@amitmahato64042 жыл бұрын
Yes, I also tried this. got correct in both tabulation and memoization. Striver has complicated this solution a little bit.😅
@amitmahato64042 жыл бұрын
@@abhishekgururani6993 Simple base case, if sum == 0, return 1; means fill all the 0 indices row with 1. The change is that you have to traverse j=0 to j
@GManiKarthik2 ай бұрын
#Understood #DP18 #Hatsoff #Striver
@TheDebuggers-fx9vp5 ай бұрын
i thnk a sligh change in base case can handle all the case well,instead of returning when we encounter the target to 0; if we keep exploring until the end of the tree then we can get our desired result class Solution { public: int helper(int arr[], int n, int sum, vector& dp) { // Base case: If there are no elements left if (n == 0) { return (sum == 0) ? 1 : 0; } // If the subproblem has already been solved, return the stored result if (dp[n][sum] != -1) return dp[n][sum]; // Compute the result for this subproblem int notPick = helper(arr, n - 1, sum, dp); int pick = 0; if (arr[n - 1]
@yashshukla1637Ай бұрын
Done. Understood the concepts so well.
@aryanagrawal47943 жыл бұрын
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.
@takeUforward3 жыл бұрын
Yes u can, won’t be an issue :)
@aryanagrawal47943 жыл бұрын
@@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?
@takeUforward3 жыл бұрын
@@aryanagrawal4794 because in partition at 0 there are other cases to handle. Here at 0, its take and notTake, hence
@aryanagrawal47943 жыл бұрын
@@takeUforward ok bhaiya got it.
@madhurnarang24402 жыл бұрын
@@aryanagrawal4794 Hey can you explain it to me?
@akr18312 жыл бұрын
Thankyou very much for explaining base case of last question. I was stacked for last 6 hours. ❤️❤️
@tarunrao1505 Жыл бұрын
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.
@aryarajendra10884 ай бұрын
same bhai
@architgupta35514 ай бұрын
@@aryarajendra1088 #include int countPartitions(int n, int d, vector &a) { // Write your code here. long long sum=0; for(int i=0 ; i
@kevalkishan38244 ай бұрын
@@aryarajendra1088 try doing mod with 10^9+1 dp[row][col] =(dp[row][col]%mod+ dp[row-1][col]%mod)%mod; int val = num[row-1]; if(col>=val){ dp[row][col] =(dp[row][col]%mod+ dp[row-1][col-val]%mod)%mod; }
@ScienceSeekho2 жыл бұрын
understood. Also thanks for explaining Space Optimization so good. I am from tier-3 mechanical never knew all these stuff
@Parthj4267 ай бұрын
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.
@hashcodez7576 ай бұрын
"UNDERSTOOD BHAIYA!!"
@techietech70732 жыл бұрын
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
@YatriSpecial2 жыл бұрын
How do I write the base case in tabulation, Could you please tell me?
@nithish_raina2 жыл бұрын
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.
@andrewcenteno34627 ай бұрын
That algebra at 10:15 is crazy I would never see that under the time constraints of a real interview. It's brilliant tho
@ritikshandilya70757 ай бұрын
Great Explanation Striver , Thanks
@ntgrn-pr5yx3 ай бұрын
understood , thank you striver
@sahilarya95103 жыл бұрын
please tell us the time when this amazing course will get end......expected time??
@dharsan.s79373 жыл бұрын
March
@anveshkarra38612 жыл бұрын
understood , the space optimization is amazing sir
@TanviPoddar-f1k8 ай бұрын
At 15:15, shouldn't the condition be ((nums[0] != 0)&&(nums[0] == target)) ??
@uvs_6032 Жыл бұрын
I have a doubt. The question says the the union of two subsets will give the original array , that means there can be repeating elements and its not necessary that S1 + S2 = totalSum E.g -> arr = {1, 2, 3, 4, 5} totalSum = 15 S1 = {1, 2 ,3, 4} S2 = {1, 5} sum1 = 1 + 2 + 3 + 4 = 10 sum2 = 1 + 5 = 6 The union of the above two will give original array but sum1 + sum2 != totalSum. So how is the code working ? Is the problem statement wrong?
@kushbudhiraja4927 Жыл бұрын
you are right code is only passing 6 test cases not all
@paracetamol91167 ай бұрын
the question's wording is wrong, look at the same question on gfg, won't see "union" written anywhere.
@chaitralishinde78155 ай бұрын
Understood better than ever!
@rohandevaki43492 жыл бұрын
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?
@adityasaini7165Ай бұрын
we can also do like this, private static int count(int i, int[] num, int k){ if(i == num.length){ if(k == 0){ return 1; }else{ return 0; } } int take = 0; if(k >= num[i]) take = count(i + 1, num, k - num[i]); int notTake = count(i + 1, num, k); return (take + notTake) % MOD; }
@kathanvakharia Жыл бұрын
Understood...Completed 18/56
@tallalhabib45262 жыл бұрын
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
@sanskarjaiswal4394 Жыл бұрын
Instead of changing the code we can just add a if statement before "take" variable that if arr[index]== 0 then skip it...
@shoryapawar2219 Жыл бұрын
Understood Thanks Striver for this Dp series
@the_shridhar9 ай бұрын
just add this in previous question: ``` if (i < 0) { return !target; } ```
@shauryatomer10583 ай бұрын
thanks for another great video
@SaiPhaniRam2 ай бұрын
Python implementation: def countPartitions(n: int, d: int, arr: List[int]) -> int: ''' Carefully analyze the problem. Let S1, S2 be the sum of two different subsets S1 + S2 = total_sum of array elements Goal: Count the subsets, such that (S1 >= S2) and (S1 - S2 = D) total_sum = S1 + S2 => S1 = total_sum - S2 From S1 - S2 = D total_sum - S2 - S2 = D S2 = (total_sum - D) // 2 (or) S1 = (total_sum + D) // 2 Problem boils down to finding number of subsets whose sum is (total_sum - D) // 2 (or) sum is (total_sum + D) // 2 ''' ''' Space Optimization ''' if not arr: return 0 total_sum = sum(arr) target = (total_sum - d) // 2 # print('Target: ', target) if (total_sum < d) or (total_sum - d) % 2 != 0: return 0 mod = 10 ** 9 + 7 prev = [0 for t in range(target + 1)] # Base Cases # 1. At index 0, if val == 0 => 2 (pick/ unpick doesn't matter) # 2. Else, At index 0, val 1 way (pick it) prev[0] = 2 if arr[0] == 0 else 1 if arr[0] != 0 and arr[0]
@tami9154 Жыл бұрын
wouldn't it be better to go an ind
@arpitrajput64242 жыл бұрын
In Lecture 17 , we can sort the vector and reverse it, then no need to change base case it will work absolutely fine.
@riddhibandyopadhyay5842 жыл бұрын
Yes, but it will take extra time complexity
@arpitrajput64242 жыл бұрын
@@riddhibandyopadhyay584 ya you're right but can be done ✅ with this approach .👍
@priyankabagal92692 жыл бұрын
You have literally made dp look so easy !
@madmaxgaming5864 Жыл бұрын
just mind blowing how you came up with the modified target, kyse kar lete ho bhaiya?
@musichub21682 жыл бұрын
Understood 💯💯Great Explanation
@manishisaxena5657 Жыл бұрын
actually we can make the base case as if(index == -1) { if(tar == 0) return 1; return 0; }
@anuragprasad6116 Жыл бұрын
underrated! taking this as a base case really simplifies the solution.
@SatyamKumarJha-v6y13 күн бұрын
How will you use tabulation in this
@ankishkhandelwal10612 жыл бұрын
In case arr =1,2,3,4 Diff =2 S1>S2 Target is =(10-2)/2 =4 Give 2 as answer 4 3,1 But 1+2+3-4=diff How this case will handle
@ShahNawaz-cx3pi2 жыл бұрын
In question it is mentioned that the union of both the set is equal to the given array.
@ankishkhandelwal10612 жыл бұрын
@@ShahNawaz-cx3pi got it
@akashkumarsingh35952 жыл бұрын
If we have handled the case num[0] == 0 previously then why we are checking it again for num[0]
@shriRadheHariom6 ай бұрын
Understood, well explained.
@shubh6256 ай бұрын
ok
@tasneemayham974 Жыл бұрын
UNDERSTOOODD!!! Thank you, Striver!!
@pankajpal9945Ай бұрын
for dp 17, why don't we go past 0 and let recursion handle the cases. i.e. if you reach -1, check if target is zero.
@nehakaushik36022 жыл бұрын
OMG bhaiya ...simple "genius"
@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)
@DevashishJose Жыл бұрын
understood. Thank you so much
@ramyasree49862 жыл бұрын
completed subsequences set problems great learning
@VikasGupta-ok9lh2 жыл бұрын
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 Жыл бұрын
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
@rajatsingh4286 Жыл бұрын
Striver can you explain the approach when there are negative elements also in the array
@sarthakkrishna3492 Жыл бұрын
use a map
@rajatsingh4286 Жыл бұрын
@@sarthakkrishna3492 how ? can you explain with example
@shreyashtech855610 ай бұрын
bro doing gods work
@shubhrajyotipoddar16849 ай бұрын
if(k==0) dp[ind][k]= 1; if(ind==0) return (arr[ind]== k)?1:0; I feel like not returning and instead adding 1 to the dp should do the trick And in case of tabulation: dp[0][0] = 1; this should do instead of the for loop of ind= 0 to n-1{dp[i][0] =1}
@ayushgautam80002 ай бұрын
Why you didn't solve it using the concept of DP16 where we were minimizing the difference between the subsets?
@namanchandak15322 жыл бұрын
at 14:03 why you removed for() dp[i][0]=1;
@parthsalat2 жыл бұрын
DP 18 starts from 7:25
@ShahNawaz-cx3pi7 ай бұрын
*********** Iterative Code for the count number subsequence whose sum is k ( & 0
@affanrahman57113 жыл бұрын
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
@takeUforward3 жыл бұрын
I discussed that only, but that adds a log n
@sourabhchoudhary72893 жыл бұрын
@@takeUforward Does 1ll
@prabhakaran554211 ай бұрын
Understood ❤
@kushalgupta204124 күн бұрын
hey can't we do it like this remove the base case to this idx < 0 then if sum == 0 return 1 or else 0; now what will happen is if idx == 0 and sum == 0 then we will use take and notTake both, but if only sum is 0 but not arr[0] then only notTake and when sum == arr[0] and both are not zero then only Take will execute so eventually u don't have to write 3 lines of extra code right?
@codeforcesaccount Жыл бұрын
understood
@saileshsirari20145 ай бұрын
Other was is just check when you reach end of nums int rec (int pos, int [] nums , int target,int sum, int mem [] []){ if(pos == nums.length){ if(target==0 ) return 1; return 0; } if( mem[pos][target]!=-1) return mem[pos][target]; int take =0; if(target>=nums[pos]){ take = rec(pos+1,nums,target- nums[pos],sum,mem); } int nonTake = rec(pos+1,nums,target,sum,mem); mem[pos][target] = nonTake+take; return mem[pos][target]; }
@hrushikesh-1914 Жыл бұрын
Understood. Thankyou sir.
@kushjoshi97162 жыл бұрын
Nicely Explained! Understood!
@sushrutasengupta12738 ай бұрын
If we had added the equations then s=T+D/2 would've happened which would remove requirements of ec 1
@TON-108 Жыл бұрын
Understood Bhaiya!
@ranasauravsingh2 жыл бұрын
UNDERSTOOD... ! Thanks striver for the video... :)
@swagcoder Жыл бұрын
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
@RVcalisthenics5 ай бұрын
understood sir🙂
@stain0p101 Жыл бұрын
Thank you striver, made it super easy and interesting to learn DP. "UNDERSTOOD" 💓💓
@kumarpurushottam6322 жыл бұрын
Thanks a Lot Striver 🥰
@ak67373Ай бұрын
We can also solve it by (total sum+ d)/2
@sonicboom6635 Жыл бұрын
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?
@himanshuagrawal80122 жыл бұрын
as we are handing separately so now we need our TARGET LOOP should start from 0...correct ??