贪心法-最少面值币数目
题目描述:给定一个面值V,给定无限供应的面值币={ 1, 2, 5, 10, 20, 50, 100, 500, 1000},求最少的面值币数目
def find_min(v): deno = [1, 2, 5, 10, 20, 50, 100, 500, 1000] n=len(deno) ans=[] i=n-1 while(i>=0): while(v>=deno[i]): v-=deno[i] ans.append(deno[i]) i-=1 for i in range(len(ans)): print(ans[i],end=' ') if __name__=='__main__': n=93 find_min(n)
先尽最大面值的挑选,然后向面值小的方向收集,但这种贪心的方法可能存在问题,如V=11:{9,6,5,1}的答案。
参考链接:https://www.geeksforgeeks.org/greedy-algorithm-to-find-minimum-number-of-coins/