需要帮助来加快Python 2中的代码

时间:2014-10-03 22:45:42

标签: python optimization dynamic-programming

我在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)

1 个答案:

答案 0 :(得分:0)

我终于能够解决这个问题了。我为变量t1opt_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)