4 Keys Keyboard

medium dp

Problem

Given N key strokes (A, Ctrl-A, Ctrl-C, Ctrl-V), maximize the number of A's printed.

InputN = 7
Output9
AAA + select + copy + paste + paste → 9.

def max_a(N):
    dp = list(range(N + 1))
    for i in range(7, N + 1):
        for j in range(3, i - 1):
            dp[i] = max(dp[i], dp[j - 1] * (i - j))
    return dp[N]
function maxA(N) {
  const dp = Array.from({length: N + 1}, (_, i) => i);
  for (let i = 7; i <= N; i++)
    for (let j = 3; j < i - 1; j++)
      dp[i] = Math.max(dp[i], dp[j - 1] * (i - j));
  return dp[N];
}
int maxA(int N) {
    int[] dp = new int[N + 1];
    for (int i = 0; i <= N; i++) dp[i] = i;
    for (int i = 7; i <= N; i++)
        for (int j = 3; j < i - 1; j++)
            dp[i] = Math.max(dp[i], dp[j - 1] * (i - j));
    return dp[N];
}
int maxA(int N) {
    vector dp(N + 1); for (int i = 0; i <= N; i++) dp[i] = i;
    for (int i = 7; i <= N; i++)
        for (int j = 3; j < i - 1; j++)
            dp[i] = max(dp[i], dp[j - 1] * (i - j));
    return dp[N];
}
Time: O(N²) Space: O(N)