【发布时间】:2016-06-01 06:41:42
【问题描述】:
本作业旨在对只能加 1、乘以 2 和乘以 3 的原始计算器实现动态编程方法。因此,输入 n 确定达到 n 的最小操作数。我已经实现了一个非常幼稚的 dp 或我认为是 dp 方法。它不工作。我没有人要问了。对于 n = 5 的输入,以下输出为: ([0, 1, 2, 2, 3, 4], [1, 1, 2, 3, 4, 5]) 而对于列表编号 = [1, 2, 4, 5] 或 [1, 3, 4, 5]。一些帮助将不胜感激。
def DPmin_operations(n):
numbers = []
minNumOperations = [0]*(n+1)
numOps = 0
numbers.append(1)
for k in range(1,n+1):
minNumOperations[k] = 10000
# for *3 operator
if k % 3 == 0:
numOps = minNumOperations[k//3] + 1
if numOps < minNumOperations[k]:
minNumOperations[k] = numOps
numbers.append(k)
# for *2 operator
elif k % 2 == 0:
numOps = minNumOperations[k//2] + 1
if numOps < minNumOperations[k]:
minNumOperations[k] = numOps
numbers.append(k)
# for + 1 operator
elif k >= 1:
numOps = minNumOperations[k - 1] + 1
if numOps < minNumOperations[k]:
minNumOperations[k] = numOps
numbers.append(k)
return (minNumOperations, numbers)
【问题讨论】:
-
我会考虑在您的代码中添加一些 cmets,以便更容易解释您要执行的操作。或者至少解释一下你为什么要这样创建代码的想法。可能会让你更容易看到你想如何解决它。
标签: python dynamic-programming