洛谷君のNOIP。のCSP信心赛B题题解(动规,思维,次大)

博客详细解析了一道动态规划题目,允许在矩阵中将一个元素变为0以求最小的最大路径和。通过两次动态规划求解,找到每个斜线上最大和次大值,从而优化到O(n^2)复杂度,解决了超时问题。
摘要由CSDN通过智能技术生成

T2

题目大意

给定一个矩阵( n ∗ m n*m nm),则你可以求从左上走到右下路径上的权值累加和的最大值(要求只能向右或下走)。此时你可以将其中的任意一个元素改成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[i1][j],dp[i][j1])+a[i][j]
这样可以十分轻松地求得最大值。


此时,我们可以来考虑改动了。如果我改动的元素不在这条已有的最大值的路径上,那么最大值肯定还是这条路径(矩阵元素都是非负的)。所以我改的肯定是在这条路径上会使得答案更小。
那么很容易想到记录一下路径,然后枚举一下路径上的点变成0,然后再求一遍最大值,不断更新答案,就可以求解,复杂度 O ( n 3 ) O(n^3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值