我在hackerrank解决了这个问题。
我的代码需要0.07秒才能使用1000长度的输入来解决,但对于长度为100,000的输入,此代码无法在10秒内解决。我想知道我的代码的哪些步骤可以修改以加快 执行。
我的代码是:
# Read input from STDIN. Print output to STDOUT
def find_payoff(t,m):
if m<=3:
return sum(t)
else:
t1=[sum(t[i:]) for i in range(m)]
opt_pay=[0]*m
opt_pay[m-3:m]=[sum(t[m-i:m]) for i in range(3,0,-1)]
for i in range(m-4,-1,-1):
opt_pay[i]=max([sum(t[i:i+j+1])+t1[i+j+1]-opt_pay[i+j+1] for j in range(3)])
return opt_pay[0]
n=input()
for i in range(n):
m=input()
t=map(int, raw_input().split())
print find_payoff(t,m)
答案 0 :(得分:0)
我终于能够解决这个问题了。我为变量t1
和opt_pay
使用了太多空间。使用我的新代码,我将这些变量的长度减少到3,并将执行时间减少到1秒。如果您有兴趣,最终的代码就在这里。
# Enter your code here. Read input from STDIN. Print output to STDOUT
def find_payoff(t,m):
if m<=3:
return sum(t)
else:
t1=[sum(t[m-i:]) for i in range(3,0,-1)]
opt_pay=t1[:]
for i in range(m-4,-1,-1):
tmp=max([sum(t[i:i+j+1])+t1[j]-opt_pay[j] for j in range(3)])
opt_pay[0],opt_pay[1:]=tmp,opt_pay[0:2]
t1[0],t1[1:]=t1[0]+t[i],t1[0:2]
return opt_pay[0]
n=input()
for i in range(n):
m=input()
t=map(int, raw_input().split())
print find_payoff(t,m)