关于SPOJ的这个问题http://www.spoj.com/problems/ACPC10D/,我写了一个python解决方案如下:
count = 1
while True:
no_rows = int(raw_input())
if no_rows == 0:
break
grid = [[None for x in range(3)] for y in range(2)]
input_arr = map(int, raw_input().split())
grid[0][0] = 10000000
grid[0][1] = input_arr[1]
grid[0][2] = input_arr[1] + input_arr[2]
r = 1
for i in range(0, no_rows-1):
input_arr = map(int, raw_input().split())
_r = r ^ 1
grid[r][0] = input_arr[0] + min(grid[_r][0], grid[_r][1])
grid[r][1] = input_arr[1] + min(min(grid[_r][0], grid[r][0]), min(grid[_r][1], grid[_r][2]))
grid[r][2] = input_arr[2] + min(min(grid[_r][1], grid[r][1]), grid[_r][2])
r = _r
print str(count) + ". " + str(grid[(no_rows -1) & 1][1])
count += 1
以上代码超出时间限制。但是,当我更改行
grid[r][2] = input_arr[2] + min(min(grid[_r][1], grid[r][1]), grid[_r][2])
到
grid[r][2] = input_arr[2] + min(min(grid[_r][1], grid[_r][2]), grid[r][1])
接受解决方案。如果您发现差异,则第一行会比较grid[_r][1], grid[r][1]
表示最小值(i.e. the row number are different
),第二行比较grid[_r][1], grid[_r][2]
表示最小值(i.e. the row number are same
)
这是一致的行为。我想了解,python是如何处理这两行的 - 这样就会导致超出时间限制,而其他则很好。