Algorithm 四键盘-我哪里错了?
我正在学习动态编程,我有一个4键盘的问题。它声明如下: 假设您有一个带有以下键的特殊键盘: 键1:(A):在屏幕上打印一个“A” 键2:(Ctrl-A):选择整个屏幕 键3:(Ctrl-C):将所选内容复制到缓冲区 键4:(Ctrl-V):在屏幕上打印缓冲区,在已经打印的内容之后附加缓冲区 现在,您只能按N次键盘(使用上述四个键),找出您可以在屏幕上打印的最大“A”数 我想到了以下想法。让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)+
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
(左时间)和缓冲区长度。