鲁宾逊教师有一只宠物猴,名叫多多。这天,她们两个正沿着乡村巷子漫步,遽然创造路边的公布牌上贴着一张小小的纸条:“欢送免费品味我种的花生!——熊字”。
鲁宾逊教师和多多都很欣喜,由于花生恰是她们的最爱。在公布牌背地,路边真的有一块花生田,花生植株一律地陈设成矩形网格(如图1)。有体味的多多一眼就能看出,每棵花生植株下的花生有几何。为了演练多多的算术,鲁宾逊教师说:“你先找到花生最多的植株,去采摘它的花生;而后再找到剩下的植株里花生最多的,去采摘它的花生;依该类推,然而你确定要在我控制的功夫内回到路边。”
咱们假设多多在每个单元功夫内,不妨做下列四件工作中的一件:
从路边跳到最邻近路边(即第一条龙)的某棵花生植株;
从一棵植株跳到前后安排与之相邻的另一棵植株;
采摘一棵植株下的花生;
从最邻近路边(即第一条龙)的某棵花生植株跳回路边。
此刻给定一块花生田的巨细和花生的散布,指导在控制功夫内,多多最多不妨采到几何个花生?提防大概惟有局部植株底下长有花生,假如那些植株下的花生个数各不沟通。
比方在图2所示的花生田里,惟有坐落(2, 5), (3, 7), (4, 2), (5, 4)的植株下长有花生,个数辨别为13, 7, 15, 9。沿着图示的道路,多多在21个单元功夫内,最多不妨采到37个花生。
输出 :
输出文献peanuts.in的第一条龙囊括三个平头,M, N和K,用空格隔绝;表白花生田的巨细为M * N(1 <= M, N <= 20),多多采花生的控制功夫为K(0 <= K <= 1000)个单元功夫。接下来的M行,每行囊括N个非负平头,也用空格隔绝;第i + 1行的第j个平头Pij(0 <= Pij <= 500)表白花生田里植株(i, j)下花生的数量,0表白该植株下没有花生。
输入 :
输入文献peanuts.out囊括一条龙,这一条龙只包括一个平头,即在控制功夫内,多多最多不妨采到花生的个数。
python代码:
m,n,k=map(int,input().split())
lis1=[]
while m>0:
m-=1
lis1.append(list(map(int,input().split())))
# print(lis1)
l1=len(lis1)
lis2=[]
# 获得花生植株坐标
for i in range(l1):
for j in range(n):
if lis1[i][j]>0:
lis2.append([i+1,j+1,lis1[i][j]])
# print(lis2)
# 按照花生数目举行排序 冒泡法
l2=len(lis2)
for i in range(l2):
for j in range(l2-i-1):
if lis2[j][2]<lis2[j+1][2]:
lis2[j],lis2[j+1]=lis2[j+1],lis2[j]
# print(lis2)
# 采摘的数目
def caizhai(lis):
lis3=[]
l3=len(lis)
if l3>0: #确定能否为空
for i in range(l3):
if i==0:
lis3.append(lis[i][0])
else:
lis3.append(abs(lis[i][0]-lis[i-1][0])+abs(lis[i][1]-lis[i-1][1]))
return sum(lis3)+l3+lis[-1][0]
else:
return 0
# 时艰采摘
while caizhai(lis2)>k:
lis2.pop()
# print(lis2)
# 输入花生数目
lis4=[]
for i in range(len(lis2)):
lis4.append(lis2[i][2])
print(sum(lis4))