M*M地块最低开发成本求解:代码输出与预期不符问题排查
建筑地基最小开发成本代码错误排查
问题概述
给定N=4的开发成本矩阵,题目要求从四种地基样式中选一种并确定位置,输出最小开发成本,预期结果为7,但现有代码运行输出15,需找出问题原因。
核心错误:需求理解完全偏差
现有代码实现的是从网格左上角到右下角的最小路径和(仅允许向右/向下移动),计算出的15是这条路径的总成本,但这和题目要求完全不符:
- 题目要求的是选择四种特定形状的地基(比如单格、横向双格、纵向双格、L型三格等),遍历所有合法位置后找出成本最低的那个,而非路径求和。
预期结果7的来源
在给定矩阵中,成本为7的地基是左上角(0,0)、(0,1)、(1,0)组成的L型区域,总成本为2+1+4=7,这就是题目要求的最小成本。
修正方案示例
重新编写代码,遍历所有合法位置和四种地基样式,计算每种样式的成本并维护最小值:
def find_min_development_cost(N, matrix): min_cost = float('inf') # 样式1:1×1单格 for i in range(N): for j in range(N): min_cost = min(min_cost, matrix[i][j]) # 样式2:1×2横向双格 for i in range(N): for j in range(N-1): current = matrix[i][j] + matrix[i][j+1] min_cost = min(min_cost, current) # 样式3:2×1纵向双格 for i in range(N-1): for j in range(N): current = matrix[i][j] + matrix[i+1][j] min_cost = min(min_cost, current) # 样式4:两种L型三格(题目指定的四种样式之一) for i in range(N-1): for j in range(N-1): # L型1:(i,j)、(i,j+1)、(i+1,j) current1 = matrix[i][j] + matrix[i][j+1] + matrix[i+1][j] # L型2:(i,j)、(i+1,j)、(i+1,j+1) current2 = matrix[i][j] + matrix[i+1][j] + matrix[i+1][j+1] min_cost = min(min_cost, current1, current2) return min_cost N = 4 matrix = [ [2, 1, 5, 2], [4, 1, 4, 2], [2, 2, 4, 1], [4, 2, 6, 4] ] print(find_min_development_cost(N, matrix)) # 输出7
内容的提问来源于stack exchange,提问作者Theodore
相关产品推荐
相关产品推荐

