AdoTowers


私信TA

用户名:AdoTowers

访问量:1649

签 名:

等  级
排  名 3581
经  验 1898
参赛次数 0
文章发表 4
年  龄 0
在职情况 在职
学  校 苍南中学
专  业

  自我简介:

解题思路:

注意事项:

参考代码:

   def move(row: int):  # 移动函数,通过pop弹出最后一个元素,和insert插入到最前面实现
   key = list1[row].pop()
   list1[row].insert(0, key)


def column_sum(column: int):  # 求和函数,求第column列所有元素之和
   Column_Sum = 0
   for row in range(n):
       Column_Sum += list1[row][column]
   return Column_Sum


def search():  # 查找最当前矩阵的列最大值
   global result  # 调用全局变量result必须先声明
   list2 = []
   for last_column in range(n):
       list2.append(column_sum(last_column))  # 记录每一列的和到list2中以便求最大值
   result_fun = max(list2)
   if result > result_fun:
       result = result_fun


def GetMin(N):  # 递归函数,N代表移动第几行,当N==-1时,没有行可以移动就求值
   if N == -1:
       search()
   else:  # 如果N不为-1就移动前一行
       GetMin(N - 1)  # 先不移动当前行,减少移动次数
       for move_times in range(n - 1):  # 每一行最多移动n-1次,算上上面那行代码一共n个结果
           move(N)
           GetMin(N - 1)


n = int(input())
while n != -1:
   result = 99999  # 找最小值,先赋一个很大的值
   list1 = [[] for i in range(n)]
   for i in range(n):
       list1[i] = list(map(int, input().strip().split()))
   GetMin(n - 2)  # 最后一行不需要移动
   print(result)
   n = int(input())

 

0.0分

2 人评分

  评论区

  • «
  • »