题目
给定一个N*M的矩阵,1表示已经占用了,0表示没有被占用,求一个由0构成的矩阵,使其周长最大
格式
输入:第一行两个整数n,m含义如上,接下来n行每行m个数表示这个矩阵
一个数,即所求答案
样例
输入:3 3
000
010
000
输出:8
解析
Codeforces 22B Bargaining Table
代码(python)
h = [0 for _ in range(25)]
l = [0 for _ in range(25)]
r = [0 for _ in range(25)]
output = 0
def solve(col):
global output
for i in range(col):
if h[i]==0:
continue
for j in range(i,-1,-1):
if h[j]>=h[i]:
l[i] = j
else:
break
for j in range(i,col):
if h[j]>=h[i]:
r[i] = j
else:
break
for i in range(col):
output = max(output,h[i]*2+(r[i]-l[i]+1)*2)
def main():
row,col =list(map(int,input().split()))
dp = [[0 for _ in range(col)] for _ in range(row)]
for i in range(row):
temp = str(input())
for j in range(col):
dp[i][j] = int(temp[j])
for i in range(row):
for j in range(col):
count = 0
y = i
while 1:
if dp[y][j]==0:
count+=1
y+=1
if y==row:
break
else:
break
h[j] = count
solve(col)
print(output)
if __name__ == '__main__':
main();
一点思考
本题虽然全AC了,但题目叙述存在一点歧义,题解的方式也存在一点凑巧,但笔者除了参考大牛的解法,自己也没想出好的解法。
比如使用解析中的解法测试用例:
输入:4 3
000
010
000
010
输出:10
但答案显然不符合题目所叙述的要求。针对此题如果有更好的解法和更合理的解释方式,也欢迎大家提出来。