我正在通过 * 动态编程技术 * 解决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
有人能帮我找出问题所在吗
1条答案
按热度按时间3lxsmp7m1#
我觉得你的循环少了一次。
然而,它仍然需要很多时间来运行,但是如果你能在main的第一个调用中传递k+1,而不是k,这对我来说是有效的。
不错的方法顺便说一句。
会努力改善这一点