一开始接触的动态规划题目就是在杭电OJ上的1003 Max Sum,求一个数列的最大连续子序列,当时花了好长时间才弄懂。后来接触到更多的动态规划题目,就愈发头晕了。
Max Sum 这题应该是很基础吧,状态转移方程为:DP[i]=Max{num[i],DP[i-1]+num[i]} 其中DP[i]表示的是以i位置结束的最大连续子序列的和。如果DP[i-1]<0,也就是说 DP[i-1]+num[i]<num[i],那么最大的序列和就更新为num[i]。具体的代码如下:
基础的问题解决了,那接下来就要面对难一点的了。HDOJ 1081 给你一个矩阵,要你求出最大的子矩阵,所谓最大子矩阵就是:sub-rectangle with the largest sum。这是一个一维扩展到二维的问题,我们可以转化为一维的问题来解决:
详细的思路已经在注释里面写了