zoukankan      html  css  js  c++  java
  • 动态规划-硬币找零

    问题描述:

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

    问题分析:

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

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

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

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

      

    import sys
    def coinss(N):
        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

      

    import numpy as np
    import sys
    def coinss(N): opt=[sys.maxsize]*(N+1) coins=[1,2,5] opt[0]=0 for i in range(1,N+1): opt[i]=np.min([opt[i-x]+1 for x in coins if i>=x]) 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]

    生活的味道
  • 相关阅读:
    [leetcode]Valid Number
    [leetcode]Edit Distance
    [leetcode]Decode Ways
    [leetcode]Maximum Depth of Binary Tree
    [topcoder]BadNeighbors
    [topcoder]ZigZag
    [leetcode]Subsets II
    [leetcode]Merge Sorted Array
    [leetcode]Binary Tree Maximum Path Sum
    hdu 2964 Prime Bases(简单数学题)
  • 原文地址:https://www.cnblogs.com/jgongzh/p/10455364.html
Copyright © 2011-2022 走看看