


Key 1: (A): Print one ‘A’ on screen.
Key 2: (Ctrl-A): Select the whole screen.
Key 3: (Ctrl-C): Copy selection to buffer.
Key 4: (Ctrl-V): Print buffer on screen appending it after what has already been printed.
The first line of input contains an integer ‘T’ denoting the number of test cases.
The next ‘T’ lines represent the ‘T’ test cases.
The first and only line of each test case contains a positive integer ‘N’, representing the number of times you can press the keys of the keyboard.
For each test case, print in a separate line, the maximum number of ‘A’s that you can print on the screen.
Try solving the problem in O(N) complexity.
You do not need to print anything, it has already been taken care of. Just implement the given function.
1 <= T <= 50
1 <= N <= 150
Where ‘T’ is the number of test cases and ‘N’ is the integer representing the number of times you can press the keys of the keyboard.
Time Limit: 1 sec
Approach: We can observe that if ‘n’ < 7, the output is ‘n’ itself. Otherwise, if ‘n’ is greater than or equal to 7, then the optimal sequence of operations will end with a suffix of one Ctrl-A, one Ctrl-C, followed by one or several Ctrl-V’s.
If F(n) given the maximum number of ‘A’s that can be printed by ‘n’ keystrokes and ‘x’ represent the number of Ctrl-V’s at the end, then recurrence relation should be-:
F(n) = n if n < 7;
F(n) = maximum of all (x+1)*F(n-x-2), where ‘x’ ranges from 1 to n-3. Here, we try for all possible points from where the suffix may start.
This approach's algorithm can be implemented as follows.
Algorithm:
If F(n) given the maximum number of ‘A’s that can be printed by ‘n’ keystrokes and ‘x’ represent the number of Ctrl-V’s at the end, then recurrence relation should be-:
F(n) = n if n < 7;
F(n) = maximum of all (x+1)*F(n-x-2), where ‘x’ ranges from 1 to n-3.
We can implement this recurrence relation using dynamic programming as follows.
Algorithm:
We can also observe that as the number of A’s become large, the effect of pressing Ctrl-V more than 3 times starts to become the same as compared to just pressing Ctrl-A, Ctrl-C and Ctrl-V again. So, the above code can be made more efficient by checking the effect of pressing Ctrl-V for 1, 2, and 3 times only.
So, if F(n) gives the maximum number of ‘A’s that can be printed by ‘n’ keystrokes and ‘x’ represents the number of Ctrl-V’s at the end, then recurrence relation should be-:
F(n) = n if n < 7;
F(n) = maximum of all (x+1)*F(n-x-2), where ‘x’ ranges from 1 to 3.
We can implement this recurrence relation using dynamic programming as follows.
Algorithm: