我试图来解决CodeChef这个问题:http://www.codechef.com/problems/COINS我的短递归函数花费太长时间执行,如何优化它
但是,当我提出我的代码,它显然需要很长时间来执行,并说时间已过。我不确定我的代码效率低下(看起来对我而言不是这样)还是I/O遇到问题。有一个9秒的时间限制,来解决最大值10级的输入,0 < = N < = 1个000 000 000
在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^log_4(n)? – user50449
我敢打赌输入()是你的瓶颈。但1G的9秒是相当不错的时间。 – Anonymous
这个程序永远不会退出,while循环会一直持续请求更多的输入。我错过了什么吗? – superultranova