Given three integers N, M and X, the task is to find the number of ways to form an array, such that all consecutive numbers of the array are distinct, and the value at any index of the array from 2 to N – 1(Considering 1 based indexing) lies between 1 and M, while the value at index 1 is X and the value at index N is 1.
Note: Value of X lies between 1 and M.
Input: N = 4, M = 3, X = 2
The following arrays are possible:
1) 2, 1, 2, 1
2) 2, 1, 3, 1
3) 2, 3, 2, 1
Input: N = 2, M = 3, X = 2
The only possible array is: 2, 1
Approach: The problem can be solved using Dynamic Programming. Let, f(i) represent the number of ways to form the array till the ith index, such that every consecutive element of the array is distinct. Let f(i, One) represent the number of ways to form the array till the i-th index such that every consecutive element of the array is distinct and arri = 1.
Similarly, let f(i, Non-One) represent the number of ways to form the array till the ith index, such that every consecutive element of the array is distinct and arri is not equal to 1.
The following recurrence is formed:
f(i, Non-One) = f(i - 1, One) * (M - 1) + f(i - 1, Non-One) * (M - 2)
which means that the number of ways to form the array till the ith index with arrayi not equal to 1 is formed using two cases:
- If the number at arrayi – 1 is 1, then opt one number out of (M – 1) options to place at the ith index, since arrayi is not equal to 1.
- If the number at arrayi – 1 is not 1, then we need to opt one number out of (M – 2) options, since arrayi is not equal to 1 and arrayi ≠ arrayi – 1.
Similarly, f(i, One) = f(i – 1, Non-One), since the number of ways to form the array till the ith index with arrayi = 1, is same as number of ways to form the array till the (i – 1)th index with arrayi – 1 ≠ 1, thus at the ith index there is only one option. At the end the required answer if f(N, One) since arrayN needs to be equal to 1.
Below is the implementation of the above approach:
Time Complexity: O(N), where N is the size of the array
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Improved By : vt_m
- Number of subsequences as “ab” in a string repeated K times
- Inclusion Exclusion principle and programming applications
- Count ways to distribute m items among n people
- Number of handshakes such that a person shakes hands only once
- Count pairs with Bitwise AND as ODD number
- Number of ways to reach Nth floor by taking at-most K leaps
- Count unique subsequences of length K
- Count number of triplets with product equal to given number | Set-2
- Probability that the pieces of a broken stick form a n sided polygon
- Dilworth’s Theorem