码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划-硬币找零

时间:2019-03-01 12:49:29      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:动态规划   sys   数值   动态   sum   算法导论   个数   bsp   苹果   

问题描述:

    假设有几种硬币,如1,2,5,并且数量无限。请找出能够组成某个数目的找零所使用最少的硬币数。

问题分析:

    用待找零的数值n,描述子结构/状态,记作sum[n],其值为所需的最小硬币数。

    对于不同的硬币面值coin[0...T],有sum[k] = min0<=j<T{sum[k-coin[j]]}+1。

    对应于给定数目的找零N,需要求解sum[N]的值。

    类似于算法导论的钢条切割问题。

 

def coinss(N):
  import sys
	opt=[sys.maxsize]*(N+1)
	coins=[1,2,5]
	opt[0]=0
	for i in range(1,N+1):
		for coin in coins:
			if i>=coin and opt[i-coin]<opt[i]-1:
				opt[i]=opt[i-coin]+1

	return opt

  

扩展:

    NxM格子路线图:opt[i][j]=opt[i-1][j]+opt[i][j-1]

    NxM格子拿最多苹果问题:opt[i][j]=max(opt[i-1][j],opt[i][j-1])+A[i][j]

动态规划-硬币找零

标签:动态规划   sys   数值   动态   sum   算法导论   个数   bsp   苹果   

原文地址:https://www.cnblogs.com/jgongzh/p/10455364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!