解题思路:

注意事项:

参考代码:

   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.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论