题解 | #最大子矩阵#

最大子矩阵

https://www.nowcoder.com/practice/a5a0b05f0505406ca837a3a76a5419b3

暴力:o(n^4),遍历每一个点及其对应的1到i,1到j的所有点。

前缀和优化:o(n^3),同理先算出前缀和,考虑如何利用前缀和来减少一个变量的遍历。

可知前缀和[l,r]=sum[r]-[l-1],此时已经确定了上下俩个点的之间的一维区间,那只需要将其往没有累积的方向逐个扩展即可。

for(int l=1;l<=n;++l){

        for(int r=l;r<=n;++r){

            for(int i=1;i<=n;++i){

                ll t=sum[r][i]-sum[l-1][i];//区间和

                dp[i]=max(dp[i-1]+t,t);//dp[i]表示[l,r]往另一方向延伸至i的最大区间和,维护更新即可;

                maxn=max(maxn,dp[i]);

            }

        }

    }

全部评论

相关推荐

群星之怒:不是哥们,你就不好奇瘫痪三十年的老植物人是啥样的吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务