对于以下问题,我很难找到正确的解决方案:
Your goal is given a positive integer n, find the minimum number of operations needed to obtain the number n starting from the number 1.
更具体地说,我在下面的评论中给出了测试用例。在
# Failed case #3/16: (Wrong answer)
# got: 15 expected: 14
# Input:
# 96234
#
# Your output:
# 15
# 1 2 4 5 10 11 22 66 198 594 1782 5346 16038 16039 32078 96234
# Correct output:
# 14
# 1 3 9 10 11 22 66 198 594 1782 5346 16038 16039 32078 96234
# (Time used: 0.10/5.50, memory used: 8601600/134217728.)
def optimal_sequence(n):
sequence = []
while n >= 1:
sequence.append(n)
if n % 3 == 0:
n = n // 3
optimal_sequence(n)
elif n % 2 == 0:
n = n // 2
optimal_sequence(n)
else:
n = n - 1
optimal_sequence(n)
return reversed(sequence)
input = sys.stdin.read()
n = int(input)
sequence = list(optimal_sequence(n))
print(len(sequence) - 1)
for x in sequence:
print(x, end=' ')
看起来我应该在输出4&5的地方输出9,但我不确定为什么不是这样。解决这个问题的最佳方法是什么?在
你的做法太贪婪了。 当n==10时,你检查它是否可以被2整除,所以你认为这是最好的步骤,在这个例子中是错误的。在
你需要做的是正确的动态编程。
v[x]
将保留到达结果x
的最小步骤数。在还有一个解决方案:
相关问题 更多 >
编程相关推荐