硬币找零问题
贪心算法
贪心算法遵循某种既定原则,不断地选取当前条件下最优的选择来构造每一个子步骤,直到获得问题最终的求解。即在求解时,总是做出当前看来最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是局部最优解。
利用贪心算法解题,需要解决以下两个问题。
- 是问题是否适合用贪心法求解,即所求解问题是否具有贪心选择性质。所谓贪心选择性质,是指应用同一规则,将原问题变为一个相似的但规模更小的子问题,后面的每一步都是当前看似最佳的选择。这种选择依赖于已做出的选择,但不依赖于未做出的选择。从全局来看,运用贪心策略解决的问题在程序的运行过程中无回溯过程。
- 是问题是否具有局部最优解,从而通过选择一个贪心标准,可以得到问题的最优解。
利用贪心算法解题的思路一般为:
1>建立对问题精确描述的数学模型,包括定义最优解的模型。
2>将问题分成一系列子问题,同时定义子问题的最优解结构。
3>应用贪心算法原则可以确定每个子问题的局部最优解,并根据最优解模型,用子问题的局部最优解堆叠出全局最优解。
硬币找零问题
小明去商店里买棒棒糖,她怎么样才能用最少个数的硬币买到心仪的糖果呢?
问题描述
现在市面上有6中不同面值的硬币,各硬币的面值分别为5分、1角、2角、5角、1元、2元。
假定商店里各面值的硬币数量无限,小明想买一只标价为0.55元的棒棒糖。
解题:
展示一种情况:用面值为2角、1角和5分的共四枚硬币来付款。
另一种情况:小明用1元硬币支付,商店用2角和5分的硬币找零,同样需要4枚硬币。付1元,找:0.2+0.2&#