逆推,当某一个位置少于1是,要取1
终点:dp[-1][-1]=max(1-nums[-1][-1],1)
最后1行: dp[m-1][i-1]=max(dp[m-1][i]-nums[m-1][i-1],1)
最后1列:dp[i-1][n-1]=max(dp[i][n-1]-nums[i-1][n-1],0)
其它位置:dp[i-1][j-1]=max(min(dp[i-1][j]-nums[i-1][j-1],dp[i][j-1]-nums[i-1][j-1]),1)
结果在dp[0][0]
m,n=map(int,input().split()) nums=[] dp=[[0 for i in range(n)] for j in range(m)] for i in range(m): nums.append(list(map(int,input().split()))) dp[-1][-1]=max(1-nums[-1][-1],1) for i in range(n-1,0,-1): dp[m-1][i-1]=max(dp[m-1][i]-nums[m-1][i-1],1) for i in range(m-1,0,-1): dp[i-1][n-1]=max(dp[i][n-1]-nums[i-1][n-1],0) for i in range(m-1,0,-1): for j in range(n-1,0,-1): dp[i-1][j-1]=max(min(dp[i-1][j]-nums[i-1][j-1],dp[i][j-1]-nums[i-1][j-1]),1) print(dp[0][0])