当前课程知识点:程序设计基础 > 第六章 递推与动态规划 > 6.3 橱窗的插花问题 > 6.3.3 用枚举思想解题
好 现在我们整个流程算法
有一个概念了
其中一些困难的地方也已经知道该怎么做了
那么我们就可以详细的设计整个程序的流程了
就像这边展示的这样
那么先是当然要定义我们需要的数组
然后因为我们要求一个最优方案
所以我们需要定义一下相关的变量
来把最优方案保存下来
然后就是刚才的枚举过程
在枚举过程中我们找到那些合法的方案
对于合法方案要去计算它的美感得分和
然后取一个最大的
代码相应的很容易就能够实现
首先我们定义美感的数组
就用我们前面那张表格中的数
然后我们定义两个变量
来保存最大的美感得分和和相应方案
那么其实有了这些信息之后
如果我们的枚举的方法
确实能够得到最优结果的话
实际上我们很容易输出答案
我们来先看答案怎么输出呢
当然最佳的美感得分和
就在我们best beauty这个变量里头
那么最大方案
我们把它放在一个叫做best put变量里面
然后去调用我们刚才写的那个ToBinary的函数
把这个方案变成具体的一个二进制表示
然后我们数一下
在哪些位置上面是1 也就是说
在哪几号花瓶上是插了花的呢
我们输出这样一个结果
就能够得到具体插花的方案
那么下面我们重点来看枚举
枚举就是一个for循环
我们要从0一直枚举到2的v次方减一
那么2的v次方怎么算
我们以前也学过了
只需要把1向左移v位就可以了
那么下面就是计算具体插花方案了
我们只需要调用这个ToBinary的函数就可以了
然后我们要判断一下
是不是这其中1的个数也就是插的花的数目
正好等于f
如果count1这个binary
这个函数调用的返回值不是f的话
那它就不是一种合法方案
我们需要直接考虑下一个枚举方案
如果它等于f
那当然我们要开始计算了
计算很简单 就是一个求和
这个相信同学们经过一段时间的学习
对这样的简单的代码都已经非常熟练了
那么计算了每一个方案的美感得分和之后
我们就和最大的美感得分和去比较
如果现在这个方案美感得分和更大 说明它更优
那我们就维护说
这个最优的方案应该是这个新方案
我们把它的美感得分和和方案本身都保存下来
这样这个代码就完成了
-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 指定界面语言
-程设论道
--程设论道
-师生问答
--师生问答
-第九章 可配置的程序设计--语法自测