T2
题目大意
给定一个矩阵( n ∗ m n*m n∗m),则你可以求从左上走到右下路径上的权值累加和的最大值(要求只能向右或下走)。此时你可以将其中的任意一个元素改成0,求改动哪一个元素,可以使最大值最小。并输出这个最小的最大值。
题解
这题的难点就是在你可以将一个格子变成0,那么不妨我们来思考如何求不变成0的最大值。
那就是一道方格取数的问题, d p dp dp的入门题。
设 d p [ i ] [ j ] dp[i][j] dp[i][j]表示从 ( 1 , 1 ) → ( i , j ) (1,1)\to(i,j) (1,1)→(i,j)的路径权值的最大值,矩阵存在 a [ ] [ ] a[][] a[][]中,则有:
d p [ i ] [ j ] = m a x ( d p [ i − 1 ] [ j ] , d p [ i ] [ j − 1 ] ) + a [ i ] [ j ] dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a[i][j] dp[i][j]=max(dp[i−1][j],dp[i][j−1])+a[i][j]
这样可以十分轻松地求得最大值。
此时,我们可以来考虑改动了。如果我改动的元素不在这条已有的最大值的路径上,那么最大值肯定还是这条路径(矩阵元素都是非负的)。所以我改的肯定是在这条路径上会使得答案更小。
那么很容易想到记录一下路径,然后枚举一下路径上的点变成0,然后再求一遍最大值,不断更新答案,就可以求解,复杂度 O ( n 3 ) O(n^3)