买花:有四个数组,长度都是n,从每个数组中取一个数,和为1000的取法。这一题傻逼了,之写出来一个O(n^3)的解法,过一半多的测试用例。后来看别人的解答,可以先计算前两个数组两两之和,后两个数组两两之和。之后就好做了。复杂度可以降到O(n^2)。变体的编辑距离:给两个字符串s1和s2,可以进行下面的操作:1.  删除s1任何一个位置的字符2. 在s2中任何位置插入任何一个字符3. 替换s1或者s2中的某个字符为任何字符假设让s1和s2相等的最小操作次数的方案是唯一的,求这个方案中插入,删除,替换这三种操作的操作次数s1 = input()s2 = input()# 变体的编辑距离def f(s1, s2):    m, n = len(s1), len(s2)    dp = [[[0, 0, 0] for _ in range(n+1)] for _ in range(m+1)]        # 初始化    for i in range(1, n+1):        dp[0][i] = [i, 0, 0]    for i in range(1, m+1):        dp[i][0] = [0, i, 0]        for i in range(1, m+1):        for j in range(1, n+1):            if s1[i-1] == s2[j-1]:                dp[i][j] = dp[i-1][j-1]            else:                t = [dp[i][j-1], dp[i-1][j], dp[i-1][j-1]]                min_t = float('inf')                for k in range(3):                    if sum(t[k]) < min_t:                        min_t = sum(t[k])                        dp[i][j] = t[k][:]                        dp[i][j][k] += 1    return dp[-1][-1]ans = f(s1, s2)print(ans[0])print(ans[1])print(ans[2])
点赞 3
评论 0
全部评论

相关推荐

10-31 22:23
门头沟学院 Java
天然不是卷王:太好了 佬的金九银十结束,等offer吐出来,我的金11银12就要开始了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务