A38895. 最小矩阵小蓝有一个100行100列的矩阵,矩阵的左上角为1。其它每个位置正好比其左边的数大2,比其上边的数大1。例如,第1行第2列为3,第2行第2列为4,第10行第20列为48。小蓝想在矩阵中找到一个由连续的若干行、连续的若干列组成的子矩阵,使得其和为2022,请问这个子矩阵中至少包含多少个元素(即子矩阵的行数和列数的乘积)。
填空题
困难
知识点
题目描述
最小矩阵
小蓝有一个100行100列的矩阵,矩阵的左上角为1。其它每个位置正好比其左边的数大2,比其上边的数大1。
例如,第1行第2列为3,第2行第2列为4,第10行第20列为48。
小蓝想在矩阵中找到一个由连续的若干行、连续的若干列组成的子矩阵,使得其和为2022,请问这个子矩阵中至少包含多少个元素(即子矩阵的行数和列数的乘积)。
参考答案
#初始化矩阵
ls=[[0]*100 for _ in range(100)]
for i in range(100):
ls[i][0]=i+1
for j in range(1,100):
ls[i][j]=ls[i][j-1]+2
#求矩阵和
def sum_(x1,y1,x2,y2):
ans=0
for i in range(x1,x2+1):
for j in range(y1,y2+1):
ans+=ls[i][j]
return ans
#暴力枚举
ans=10000
for x1 in range(100):
for y1 in range(100):
for x2 in range(x1,100):
for y2 in range(y1,100):
t=sum_(x1,y1,x2,y2)
if t==2022:
ans=min(ans,(x2-x1+1)*(y2-y1+1))
else :
break
print(ans)
#运行结果:12
上一题
下一题