Dynamic Programming is an algorithmic paradigm that solves a given complex problem by breaking it into subproblems and stores the results of subproblems to avoid computing the same results again. Dynamic programming is discussed in next post i.e. 1) Overlapping Subproblems Memotization Tabulation 2) Optimal Substructure What is subsequences ? A subsequence is a sequence that appears in the same relative order, but not necessarily contiguous. The list of all subsequences for the word " apple " would be " e, l, le, p, pe, pl, ple, p, pe, pl, ple, pp, ppe, ppl, pple, a, ae, al, ale, ap, ape, apl, aple, ap, ape, apl, aple, app, appe, appl, apple ". Longest Increasing Subsequence Input : arr[] = {3 , 10 , 2, 1, 20 } Output : Length of LIS = 3 The longest increasing subsequence is 3, 10, 20 Input : arr[] = {3, 2} Output : Length of LIS = 1 The longest increasing subsequences are {3} and {2} Input :...