当前课程知识点:程序设计基础 > 第六章 递推与动态规划 > 6.3 橱窗的插花问题 > 6.3.5.1 采用动态规划算法—优化分析
我们把枚举和递推相结合
得到了一个比单纯的枚举效率更高的一种算法
本着精益求精的态度
我们就问说这个方法还能进一步优化吗
如果我们说还能 那怎么优化呢
请大家来考虑这样的一种情况
前三个花瓶插两朵花
会怎么样呢
当然第一种情况是说
0号花 1号花分别插在0号1号花瓶里头
也就是我们前面用到了partial_sum的意图
那么对于前三个花瓶里头011这种方案呢
它的美感得分的和是7+21=28的
那么对于前三个花瓶插两朵花
第二种方法就是把1号也空着
这个时候呢 我们需要计算的是partial_sum[(101)]
那么根据我们查之前的那个美感表呢
它的部分的美感和是7+(-4)
我们简单的写也就是7-4了等于3
还有第三种方案
我把0号花瓶给空着
这个时候我们计算的是partial_sum[(110)]
查表可以知道它的美感得分是23-4=19
那么显然对于前三个花瓶插入两朵花的
这么一个局部的方案来说
最优的是第一种方案
就是美感得分是28这种方案
我们整个题目呢是要求说
所有的花插在花瓶里以后
那种方法是最优的
我们先不管所有的方案
那我们想如果一种方案
它的前三个花瓶呢就是插了两朵花
后面的花我还不太清楚插哪里
那我就在这个小范围内去找一个最优的
那显然我们是需要去计算这种情况的
那我不知道后面两个花瓶怎么插
我就打个问号
所以呢我们就去找求一个max
是那些可能值的max呢
就是后两个花瓶不知道怎么插
但是呢前面的花瓶有011 101和110三种方案
我需要去求这三类的方案中间的最优的一个
那么根据我们的partial_sum的递推的式子呢
其实我们可以去把它分解一下
就是已知的部分和呢是后面三个花瓶
也就是真的是011 101和110这三种方案
然后未知部分呢是剩余的花瓶两个问号
加上前面不插花的这么一个
我们暂时用partial_sum来表示
这个式子呢是可以进行一些化简的 这个我们都会
我们把max分到了每个数中间去
因为每一项都是两个之和
所以呢两个各取max以后再相加
也能和原来的结果一样的
那么这个时候我们就发现了
对于前面的011 101和110这个partial_sum来说呢
它的最大的值是第一种方案partial_sum[(011)]
那么后面呢他们是相同的项
所以呢max其实可以合并成一项
就是前三个花瓶不插花
然后呢后面的花瓶去插花
这里头我们找一个最优的就行了
那么根据这样的一个递推的式子呢
我们就可以想到说在计算过程中间
我们其实只需要计算
当然就要保存了
那些最佳的部分插花方案
那有些插花方案它不是最优的
不是部分最佳的
那完全就没有必要存
因为它必然不可能是最后的最优方案
所以呢我们刚才那个partial_sum递推方案公式呢
可以再改一改
我们只需要关注那些最优的
我们只要让最优的这么一种部分的插花方案呢
从1到2到V个花瓶这样逐渐的增大规模
然后一直去计算总是去计算它的最优方案
并且保持下来
这样呢最终我们应该也能够得到题目答案
-1.1 基础知识
-1.2 买菜问题
-1.3 数学运算
-1.4 补充说明
-1.5 总结
--1.5 总结
-程设论道
--程设论道
-师生问答
-第一章 编程初步--语法自测
-2.1 关于超级计算器的几点思考
-2.2 电子秤模拟 — 背景介绍及需求分析
-2.3 电子秤模拟 — 代码实现
-2.4 变量定义与变量类型
-2.5 猜数游戏与数据表示
-2.6 关于变量的讨论
--公告
-2.7 变量体现的计算思维
-程设论道
--程设论道
-师生问答
--师生问答
-第二章 变量与代数思维--语法自测
-3.1 谁做的好事——语义表示
-3.2 谁做的好事——真假检查
-3.3 谁做的好事——循环枚举
-3.4 谁是嫌疑犯——多重循环枚举
-3.5 谁是嫌疑犯——破案线索表示
-3.6 谁是嫌疑犯——用二进制枚举
-程设论道
--程设论道一
--程设论道二
--程设论道三
-师生问答
-第三章 逻辑推理与枚举解题--语法自测
-4.1 插花游戏
-4.2 筛法
-4.3 线性查找
-4.4 折半查找
--4.4.1 提问
-4.5 排序问题
-4.6 总结
--4.6.1 总结
-程设论道
--程设论道二:筛法
-师生问答
-第四章 筛法与查找--语法自测
-5.1 阶乘
-5.2 排序
-5.3 矩阵填充
-5.4 分书与八皇后
-5.5 青蛙过河
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答一
--师生问答二
-第五章 分治思想与递归--语法自测
-6.1 兔子数列问题
-6.2 分鱼问题
-6.3 橱窗的插花问题
-6.4 最长公共子序列问题
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第六章 递推与动态规划--语法自测
-7.1 统计记录总数
-7.2 统计活跃用户数
-7.3 统计在线时长
--7.3.2 结构
-7.4 总结
--7.4.1 总结
-程设论道
--程设论道
-师生问答
--师生问答
-第七章 文本数据处理--语法自测
-8.1 将数据组织成链表
-8.2 提高链表访问效率 —— 哈希链表
-8.3 以二进制文件存储链表
-程设论道
--程设论道一
--程设论道二
-师生问答
--师生问答
-第八章 非文本数据处理--语法自测
-9.1 自动售卖程序
-9.2 配制水果信息
-9.3 指定界面语言
-程设论道
--程设论道
-师生问答
--师生问答
-第九章 可配置的程序设计--语法自测