Algorithm 四键盘-我哪里错了?

Algorithm 四键盘-我哪里错了?,algorithm,dynamic-programming,Algorithm,Dynamic Programming,我正在学习动态编程,我有一个4键盘的问题。它声明如下: 假设您有一个带有以下键的特殊键盘: 键1:(A):在屏幕上打印一个“A” 键2:(Ctrl-A):选择整个屏幕 键3:(Ctrl-C):将所选内容复制到缓冲区 键4:(Ctrl-V):在屏幕上打印缓冲区,在已经打印的内容之后附加缓冲区 现在,您只能按N次键盘(使用上述四个键),找出您可以在屏幕上打印的最大“A”数 我想到了以下想法。让f(n)成为我可以为ntime按键输入的最大“A”,然后我就有了以下内容: F(n)=max{F(n-1)+

我正在学习动态编程,我有一个4键盘的问题。它声明如下:

假设您有一个带有以下键的特殊键盘:

键1:(A):在屏幕上打印一个“A”

键2:(Ctrl-A):选择整个屏幕

键3:(Ctrl-C):将所选内容复制到缓冲区

键4:(Ctrl-V):在屏幕上打印缓冲区,在已经打印的内容之后附加缓冲区

现在,您只能按N次键盘(使用上述四个键),找出您可以在屏幕上打印的最大“A”数

我想到了以下想法。让
f(n)
成为我可以为
n
time按键输入的最大“A”,然后我就有了以下内容:

F(n)=max{F(n-1)+1,F(n-1)+缓冲区,F(n-3)*2

对于
f(n-1)+1
,它只是表示按“A”

对于
f(n-1)+buffer
,这意味着按下
ctrl-v
,以便将buffer中的'A'数添加到屏幕上

对于
f(n-3)*2,它意味着执行
ctrl-A
ctrl-c
ctrl-v

我有以下意见:


钥匙01 2 3 4 5 6 7 8
马克萨01123456912
缓冲区0 0 0 0 3 3 3

当我试图根据我的想法计算f(9)
时,它应该是15,但答案是16


有人能指出我的转换函数哪里不正确吗?非常感谢。

问题是
缓冲区中
a
s的数量应该是
f
的一个参数,即
f(n,缓冲区大小)
,因为如果只使用
f(n-3)*2
在不维护
缓冲区大小的情况下,您正在隐式修改
缓冲区

我理解
f(9)
应该是从第5步选择全部、复制、粘贴、粘贴、粘贴。但我想知道我哪里错了。对于9,111123444给出了16。顺便说一句,我想您的函数应该有两个参数,都是
n
(左时间)和
缓冲区
长度。