总结:动态规划(二)例题解析

本文深入探讨动态规划的运用,通过解析最大子矩阵、花束摆放、复制书稿和插入字符串等复杂问题,阐述如何将二维问题降维解决,以及如何找到状态转移方程,降低时间复杂度。
摘要由CSDN通过智能技术生成

解决动态规划问题的关键:找状态,描述状态转移方程 难点:怎么分阶段,怎么找状态
今天讲了动态规划的第二组例题,这一组的题目要比上周讲的复杂,理解起来难度也更大,整个问题的维度从一维上升到了二维。因此解决问题就有了相应的对策,将二维降阶,每一个子问题就是一个一维的动态规划了,这样问题就方便求解了。
1.最大子矩阵
给定N和一个NN得矩阵,求该矩阵的一个子矩阵,使子矩阵中所有数字的和最大,求出这个最大值。
输入:N,然后是N
N个绝对值不超过128的整数
输出:最大子矩阵的和
问题分析:枚举子矩阵最上和最下的行以及最左和最右的列,但仅这样就已经是O(N^4)的复杂度了。对于N<=100以及1s的时间限制来说,这种方法是不行的,如何根据子矩阵的特性来解决此题
类比最大子段和(一维),最大子矩阵(二维)
起始行和结束行枚举
每一列的值
确定起始列和结束列
解法:每次枚举子矩阵上最上的行u和最下的行d ,再把这个子矩阵的每一列的值相加压缩成一个一维数组,对这个数组求其最大子段和,这样就相当于把所有最上的行为u、最下行为d的最大子矩阵和求出来了
时间复杂度:O(N^3)
空间复杂度:O(N^2)
Int a[N][N],b[N];
输入a[i][j]
利用到最大子段和
分解问题!!降阶
2.花束摆放问题
问题描述:现在有F束不同品种的花束,同时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值