题目

【算法】换钱1

举例

【算法】换钱1

解答

假设arr=[5,2,3],aim=15
数组arr长度N
设数组dp[N][aim]

  1. dp[i][0] (i∈[0,N])为数组第一列,表示使用arr[i]的货币换的钱数0时,需要的钱的张数,全部标为0。
  2. dp[0][j] (j∈[0,aim])为数组第一行,表示使用arr[0]的货币换钱数j时,需要的钱的张数。arr[0]=5,aim=15,则dp[0][5]=1,dp[0][10]=2,dp[0][15]=3,其余的标为int.max。
    【算法】换钱1
  3. 剩下的位置,从左到右、从上到下计算,计算到dp[N][aim]时得到结果。计算步骤如下:
  • 不能使用当前货币arr[i]的情况时,则继承上一枚货币的张数,即dp[i][j] = dp[i-1][j]
  • 只够使用1张当前货币arr[i]的情况时,则使用上一枚货币凑j-arr[i]时的张数+1,即dp[i][j] = dp[i-1][j - arr[i]]+1
  • 只够使用2张当前货币arr[i]的情况时,则使用上一枚货币凑j-arr[i]时的张数+1,即dp[i][j] = dp[i-1][j - 2*arr[i]]+2
  • 只够使用3张当前货币arr[i]的情况时,则使用上一枚货币凑j-arr[i]时的张数+1,即dp[i][j] = dp[i-1][j - 3*arr[i]]+3

归纳以上情况,最终取得到转态转移方程dp[i][j] = min(dp[i-1][j],min(dp[i-1][j-k*arr[i]]+k))
【算法】换钱1【算法】换钱1

相关文章:

  • 2021-12-25
  • 2022-12-23
  • 2022-01-18
  • 2021-05-05
  • 2022-01-01
  • 2022-12-23
  • 2021-08-22
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-05-28
  • 2022-01-04
  • 2021-08-16
相关资源
相似解决方案