def main():
n, m = input().split()
n, m = int(n), int(m)
sum = 0
vec = [[0]*m for _ in range(n)]
for i in range(n):
nums = input().split()
for j in range(m):
vec[i][j] = int(nums[j])
sum += vec[i][j]
hori = [0]*n
for i in range(n):
for j in range(m):
hori[i] += vec[i][j]
veri = [0]*m
for j in range(m):
for i in range(n):
veri[j] += vec[i][j]
result = float('inf')
horiCut = 0
for i in range(n):
horiCut += hori[i]
result = min(result,abs(sum - horiCut - horiCut))
veriCut = 0
for j in range(m):
veriCut += veri[j]
result = min(result,abs(sum - veriCut - veriCut))
return result
if __name__ == '__main__':
print(main())
def main():
n, m = input().split()
n, m = int(n), int(m)
sum = 0
vec = [[0]*m for _ in range(n)]
for i in range(n):
nums = input().split()
for j in range(m):
vec[i][j] = int(nums[j])
sum += vec[i][j]
hori = [0]*n
for i in range(n):
for j in range(m):
hori[i] += vec[i][j]
veri = [0]*m
for j in range(m):
for i in range(n):
veri[j] += vec[i][j]
result = float('inf')
horiCut = 0
for i in range(n):
horiCut += hori[i]
result = min(result,abs(sum - horiCut - horiCut))
veriCut = 0
for j in range(m):
veriCut += veri[j]
result = min(result,abs(sum - veriCut - veriCut))
return result
if __name__ == '__main__':
print(main())
题目挺简单的,但是读起来我有一点疑惑,就是只允许将区域按横向或纵向划分成两个子区域,也就是横n-1竖m-1种分法?