题目链接:
很明显采用二维矩阵,但是Python没有提供直接的二维矩阵,二维列表寻找最大值的坐标时,又不太方便,所以选择展开成一维。
大家如果有其他解决办法,也欢迎提出呀
peanut = []
m, n, k = input().split() # 输入第一行三个数,赋值
m = int(m) # 赋值后为str->int
n = int(n)
k = int(k)
for i in range(m):
line = input().split()
lin = [int(x) for x in line] # 将每一行输入转化成int列表
for j in lin:
peanut.append(j) # 不做二位列表,直接排成一维
num_step = 0 # 轮数
reap = 0 # 采摘量
while True:
num_step += 1
indx = peanut.index(max(peanut)) # 找到最大值
l = indx // n # 最大值纵横坐标
c = indx % n
if num_step == 1 : # 当第一次时,单独处理,站在最大值上面的路边
now = [-1, c]
steps = abs(l-now[0]) + abs(c-now[1]) + 1 # 计算当前位置和最大值的差(注意绝对值),并加一(采摘)
if (k-steps) >= l+1: # 预计一下,走完这一轮能否回到路边,能回到的话:
k -= steps
now = [l, c]
reap += peanut[l*n +c] # 采摘
peanut[l*n + c] = 0 # 改点采摘完为0
else : # 不能回到路边,结束
break
print(reap)