【发布时间】:2014-10-03 22:45:42
【问题描述】:
我正在hackerrank 中解决这个问题。
我的代码用 1000 长度的输入解决了 0.07 秒,但对于长度为 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)
【问题讨论】:
-
您可能需要仔细检查该链接,它似乎不会导致任何在您的问题上下文中有意义的内容。
-
@TML,如果你去链接,点击标题中的
Problem。 -
100,000 你的代码用了多长时间?听起来您正在寻找不是线性缩放或更好的算法的一部分。这很可能在您的循环中 - 我会专注于它在那里所做的事情。
-
你确定这段代码能正确解决问题吗?看起来不是最优的。
-
我确信这段代码正确地解决了这个问题,因为它的变量长度少于 1000 个。我相信它也是最优的,因为它与我被教导为程序员的圣杯的数据大小成线性关系。我只是在网站上运行代码,它说它无法在 10 秒内解决它。一旦我将在我的机器上运行代码,我将提供更多更新。
标签: python optimization dynamic-programming