leetcode_651 4键键盘

253 阅读1分钟

要求

假设你有一个特殊的键盘包含下面的按键:

Key 1: (A):在屏幕上打印一个 'A'。

Key 2: (Ctrl-A):选中整个屏幕。

Key 3: (Ctrl-C):复制选中区域到缓冲区。

Key 4: (Ctrl-V):将缓冲区内容输出到上次输入的结束位置,并显示在屏幕上。

现在,你只可以按键 N 次(使用上述四种按键),请问屏幕上最多可以显示几个 'A'呢?

样例 1:

输入: N = 3
输出: 3
解释: 
我们最多可以在屏幕上显示三个'A'通过如下顺序按键:
A, A, A

样例 2:

输入: N = 7
输出: 9
解释: 
我们最多可以在屏幕上显示九个'A'通过如下顺序按键:
A, A, A, Ctrl A, Ctrl C, Ctrl V, Ctrl V

注释:

  • 1 <= N <= 50
  • 结果不会超过 32 位有符号整数范围。

核心代码

class Solution:
    def maxA(self, N: int) -> int:
        dp = [0 for _ in range(N + 1)]
        
        for i in range(1, N + 1):
            ####情况1:直接敲一个A
            dp[i] = dp[i-1] + 1
            ####情况2:选中-复制-粘贴
            for j in range(i - 1):
                dp[i] = max(dp[i], dp[j] * (i-j+1-2))
        
        return dp[N]

image.png

解题思路:思路和心得:dp,dp本身就是一种贪心、尽可能地用 选中-复制-粘贴