要求
假设你有一个特殊的键盘包含下面的按键:
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]
解题思路:思路和心得:dp,dp本身就是一种贪心、尽可能地用 选中-复制-粘贴