【发布时间】:2015-02-24 03:16:34
【问题描述】:
我正在尝试在 CodeChef 上解决这个问题:http://www.codechef.com/problems/COINS
但是当我提交我的代码时,它显然需要很长时间才能执行,并且说时间已经过期。我不确定我的代码是否效率低下(对我来说似乎不是这样)或者我是否遇到了 I/O 问题。有 9 秒的时间限制,解决最多 10 个输入,0
在 Byteland 他们有一个非常奇怪的货币体系。
每个 Bytelandian 金币上都写有一个整数。一枚硬币 n可以在银行兑换成三种硬币:
n/2、n/3和n/4。但 这些数字都被四舍五入了(银行必须盈利)。您也可以用美元出售 Bytelandian 硬币。找的零钱 比率为 1:1。但是你不能购买 Bytelandian 硬币。
你有一枚金币。美元的最高金额是多少 能买到吗?
这是我的代码:输入 1 000 000 000 似乎需要很长时间
def coinProfit(n):
a = n/2
b = n/3
c = n/4
if a+b+c > n:
nextProfit = coinProfit(a)+coinProfit(b)+coinProfit(c)
if nextProfit > a+b+c:
return nextProfit
else:
return a+b+c
return n
while True:
try:
n = input()
print(coinProfit(n))
except Exception:
break
【问题讨论】:
-
另外,如果我说我的函数的复杂性将增加 3 的幂,我是否正确?即 3^log_4(n) 是最坏的情况吗?
-
我敢打赌 input() 是你的瓶颈。但是 1G 的 9 秒是相当公平的时间。
-
这个程序永远不会退出,while 循环将永远继续要求更多输入。我错过了什么吗?
-
当我在最后删除 try/except 块后尝试你的程序时,我每次都有一个
maximum recursion depth错误,不管n -
@superultranova,不是真的。 except 分支中的 break 将退出 while 循环。
标签: python performance recursion