矩阵最值
题目描述
给定一个仅包含0和1的n*n二维矩阵
请计算二维矩阵的最大值
计算规则如下
每行元素按下标顺序组成一个二进制数(下标越大约排在低位),
二进制数的值就是该行的值,矩阵各行之和为矩阵的值
允许通过向左或向右整体循环移动每个元素来改变元素在行中的位置
比如
[1,0,1,1,1]向右整体循环移动两位[1,1,1,0,1]
二进制数为11101值为29
[1,0,1,1,1]向左整体循环移动两位[1,1,1,1,0]
二进制数为11110值为30
输入描述
数据的第一行为正整数,记录了N的大小,0 < N <= 20
输入的第2到n+1行为二维矩阵信息,行内元素边角逗号分割
输出描述
矩阵的最大值
示例一
输入
5
1,0,0,0,1
0,0,0,1,1
0,1,0,1,0
1,0,0,1,1
1,0,1,0,1
输出
122
说明
第一行向右整体循环移动一位,得到其中最大值 11000 24
11000
10100
11100
10110
因此最大122
上代码
# !E:\pythonScript\venv python3
# -*- coding: utf-8 -*-
"""
Date: 2023/3/23
Time: 20:32
Author: kang
"""
def matrix_sum(num, data):
array = data
# 生成循环移位后的数据列表
array_last = []
for i in range(num):
li = []
for j in range(num, 0, -1):
li.append(array[i][j:] + array[i][0:j])
array_last.append(li)
# 计算每一列的最大值
max_num = []
for i in range(num):
sum_list = []
for j in range(num):
sum_list.append(int(array_last[i][j], 2))
max_num.append(max(sum_list))
# 计算最终结果
sum_num = sum(max_num)
print(sum_num)
if __name__ == '__main__':
# 将逗号去掉,得到原始数据列表
num = int(input())
data = []
for i in range(num):
data.append(input().replace(",", ""))
matrix_sum(num, data)
![](https://i-blog.csdnimg.cn/blog_migrate/4c00f7363e5ffc519f0dc433f895f910.gif)