debugging 使用动态规划技术调试Google KickStart“2022”D轮最大增益问题

v9tzhpje  于 2023-01-31  发布在  Go
关注(0)|答案(1)|浏览(191)

我正在通过 * 动态编程技术 * 解决Google KickStart 2022第D轮-最大增益问题,但我厌倦了调试它。
下面是问题的链接:Maximum Gain Problem
下面是我的python代码:

#supporting function
def proceedForOneOnly(O, k, gainOne):
    if k==0:
        return 0
    return gainOne + max([proceedForOneOnly(O[1:], k-1, O[0]), proceedForOneOnly(O[:-1], k-1, O[-1])])

#solve
def maxGain(A, B, k, gain):
    #BaseCase
    if k==0:
        return 0
    #Checking if any of the two task-arrays are empty
    if len(B)==0:
        return proceedForOneOnly(A, k-1, gain)
    elif len(A)==0:
        return proceedForOneOnly(B, k-1, gain)
    #if both aren't empty
    return gain + max([maxGain(A[1:], B, k-1, A[0]), maxGain(A[:-1], B, k-1, A[-1]), maxGain(A, B[1:], k-1, B[0]), maxGain(A, B[:-1], k-1, B[-1])])

#taking input and caling maxGain() iteratively
def main():
    n = int(input())
    for i in range(n):
        nA = int(input()); A = list(map((lambda i: int(i)), input().split()))
        nB = int(input()); B = list(map((lambda i: int(i)), input().split()))
        k  = int(input())
        print(f"Case #{1}: {maxGain(A, B, k, 0)}")

main()

问题是,我在前两个测试用例中获得了输出22(应为24)和138(应为148),随附如下:

2
3
3 1 2
4
2 8 1 9
5
4
1 100 4 3
6
15 10 12 5 1 10
6

有人能帮我找出问题所在吗

3lxsmp7m

3lxsmp7m1#

我觉得你的循环少了一次。
然而,它仍然需要很多时间来运行,但是如果你能在main的第一个调用中传递k+1,而不是k,这对我来说是有效的。
不错的方法顺便说一句。
会努力改善这一点

相关问题