刚参加完华为笔试,一个字太惨”,生活或许就是这样,你不努力,不去拼一把,在你需要它的时候,它就会狠狠的给你一巴掌。为了不让生活留下太多遗憾,我还是决定了从机械转向代码,然后向算法师靠拢。本文将介绍以找零问题介绍动态规划和回溯法两种程序设计方法,主要是记录自己学习,如果能帮到大家那我也会很开心。
找零问题描述
基本问题
需要找零的钱为m,现有零钱种类c1、c2、c3、…cn,每种钱数量无限,如何找到最少的硬币实现找零?
提炼出一些术语:
- 限制条件:找的零钱总和等于需要找零的钱m
- 最优函数:硬币的数量最小
- 可行解 :找钱的方法有多种
- 最优解:找到零钱且硬币数最小
贪婪算法:greedy method
贪婪算法:需要构建一个最优准则,每一步都按该准则作出决策,所依据的标准称为贪婪准则。
以找零为例:需要找零的钱m=14;拥有的零钱种类c={1,5,7,10}
贪婪准则:每都试图以面值最大的硬币找零
步骤:
- 1 判断,若m>10,选取一个10的硬币,更新剩余找零m-10=4元
- 2 判断:若m<10,继续判断其他硬币,直到m>1找可找零的硬币
- 3 继续 1、2步骤,直到m==0
上面获得的解:x&#