【发布时间】:2018-10-06 10:01:05
【问题描述】:
一个程序有一个寄存器X,初始化为0,只支持3条指令:
LDI v:将立即值 v 加载(存储)到 X ADD v:将立即值 v 加到 X 中,并将结果存储在 X 中。 SQR:将 X 的值平方并将结果存储在 X 中。
短指令序列如何影响 的值的示例:
Instruction X
LDI 5 5
ADD 2 7
SQR 49
ADD -4 44
LDI -3 -3
SQR 9
我需要解决的问题是跳过选定的指令以在程序结束时为X 获取最大可能值。
到目前为止我所拥有的:
def prog(n):
x = 0
arr = []
for i in range(n):
itm = input().split()
arr += [(itm)]
#arr_rev = arr[::-1]
#limit = arr_rev.index(["SQR"])+len(arr)-1
limit = len(arr) - 1 - arr[::-1].index(['SQR'])
for i in range(len(arr)):
if i < limit:
if arr[i][0] == "ADD":
x += int(arr[i][1])
elif arr[i][0] == "LDI":
x = int(arr[i][1])
elif arr[i][0] == "SQR":
x = x**2
else:
if arr[i][0] == "ADD" and int(arr[i][1]) > 0:
x += int(arr[i][1])
elif arr[i][0] == "LDI" and int(arr[i][1]) > x:
x = int(arr[i][1])
elif arr[i][0] == "SQR":
x = x**2
return x
因为我不想添加负数,所以我跳过那些。我也不想加载小于当前X 的数字。
但是,平方负数使其成为正数,因此上述策略可能不适用于所有情况。在我通过最后一个 SQR 之前,我在所有情况下都豁免了该规则。有没有更有效的方法来做到这一点?
【问题讨论】:
-
有一个很好的 dynamic programming 算法。
-
不太确定我理解这个@internet_user
标签: python python-3.x algorithm performance