第三题是这么个意思吗 """ 老王打字: 输入一个字母,步数加1; 选定全部已输入字符,步数加2; 复制全部选定字符,步数加2; 粘贴全部复制字符,步数加2; 按ESC取消选择,步数加1; 问:输入N个字最少需要多少步。 """ # 输入 n = int(input().strip()) dp = [0 for _ in range(n+1)] dp[0] = 0 # 首先确定,最后一次操作要么是输入,要么是粘贴 for i in range(1, n+1): # 1. 最后1步是输入的最小值 dp[i] = dp[i-1]+1 # 2. 最后1步是粘贴的最小值,因为可以多次粘贴,所以需要循环找最后几步都是粘贴的情况, for j in range(2,int(i/2)): # 首先要满足i个字符是j的倍数(一次全选,然后多次粘贴) if i%j != 0: continue # 粘贴j个字符,说明在dp[j]的时候做了全选的操作(+2),取消选择后粘贴是为了避免覆盖掉前面的内容(+1),然后粘贴(i-j)/j次(+((i-j)/j)*2) dp[i] = min(dp[i], int(dp[j]+2+1+((i-j)/j)*2)) # 输出 print(dp[n])
点赞

相关推荐

牛客51274894...:照片认真的吗,找个专门拍证件照的几十块钱整端正点吧,要不就别加照片
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务