POJ-1050 To the MAX题解

这篇博客介绍了POJ-1050题目的解决方案,主要内容包括最大子矩阵和的求解思路及两种方法:一是使用二维前缀和,二是通过矩阵压缩转换为最大子序列和的线性DP问题。博主建议重点掌握第二种DP方法,因为其时间复杂度更低。
摘要由CSDN通过智能技术生成

题目大意:

给定一个矩阵,要求矩阵中最大子矩阵和。N<=100
如输入:
4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
输出:
15

思路:

法一:这题是到数据范围不是很严谨的一道题,虽说N<=100,但是N^4仍然可以过。
复习一下二维前缀和的知识
dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1];
若要求左上角为(i,j)右下角为(x,y)的矩形和则为:dp[x][y]-dp[x][j-1]-dp[i-1][y]+dp[i-1][j-1];
法二:比较精彩的方法,矩阵是可以压缩的,压缩后相当于求最大子序列和的问题(类似线性dp问题)。状态转移方程式dp[i][j][k]=max{ dp[i-1][j][k]+SUM(j,k),SUM(j,k) }; 时间复杂度为O(N^3)。

反思:两种做法都可尝试一下,第一种是复习一下前缀和的知识,第二种是dp,比较巧妙而且省空间。但第一种的复杂度应该是可以被卡的,所以此题应该重点掌握第二种dp做法。

法一代码:

#include<cstdio>
#include<algorithm>

using namespace std;
const int MAXN=100+10;
int box[MAXN][MAXN];

i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值