标签:动态规划 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