<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          深入淺出算法題-零錢兌換的動(dòng)態(tài)規(guī)劃問題

          共 849字,需瀏覽 2分鐘

           ·

          2022-05-23 14:18

          點(diǎn)擊上方摸魚吧算法工程師”卡片,關(guān)注星標(biāo)
          獲取有趣、好玩的前沿干貨!

          一、 零錢兌換:硬幣的最少個(gè)數(shù)

          • 給一個(gè)整數(shù)數(shù)組 coins ,表示不同面額的硬幣;以及一個(gè)整數(shù) amount ,表示總金額。

          • 計(jì)算并返回可以湊成總金額所需的最少硬幣個(gè)數(shù) 。如果沒有任何一種硬幣組合能組成總金額,返回-1 。

          • 可認(rèn)為每種硬幣的數(shù)量是無限的。

          解題關(guān)鍵點(diǎn)

          • 經(jīng)典的動(dòng)態(tài)規(guī)劃問題。

          • 設(shè)置一個(gè)數(shù)組dp,其中每個(gè)元素dp[i]記錄的是,當(dāng)金額為i時(shí),所需要的硬幣個(gè)數(shù)。則題目所求為dp[amount]。

          • 考慮基礎(chǔ)簡單的例子。有dp[0] = 0,也就是說,金額為0所需的硬幣個(gè)數(shù)是0。

          • 考慮狀態(tài)轉(zhuǎn)移公式。從小到大遍歷金額數(shù),這樣,可以保證:當(dāng)我們計(jì)算金額i所需的最少硬幣個(gè)數(shù)dp[i]時(shí),前面更少的金額所需要的最少硬幣個(gè)數(shù),比如dp[i-1]、dp[i-2]······等都已求出。

          • 那么,對任意的dp[i],面對某種硬幣的面額(記為coin),如果在湊成金額i時(shí)選擇了這枚硬幣,那么在湊成金額(i-coin)時(shí)所需要的硬幣個(gè)數(shù) + 1即可。也就是dp[i] = dp[i-coin] + 1。

          class?Solution(object):
          ????def?coinChange(self,?coins,?amount):
          ????????"""
          ????????:type?coins:?List[int]
          ????????:type?amount:?int
          ????????:rtype:?int
          ????????"
          ""
          ????????#?初始化為正無窮大
          ????????dp?=?[float('inf')]*(amount+1)
          ????
          ????????#?金額為0,所要湊的硬幣個(gè)數(shù)也為0
          ????????dp[0]?=?0
          ????????
          ????????for?coin?in?coins:
          ????????????sum_coin?=?coin
          ????????????
          ????????????while?sum_coin?????????????????dp[sum_coin]?=?min(dp[sum_coin],?dp[sum_coin-coin]+1)
          ????????????????sum_coin?+=?1
          ????????
          ????????#?print(dp)
          ????????return?dp[amount]?if?dp[amount]!=?float('inf')?else?-1

          二、零錢兌換:硬幣的組合總數(shù)

          • 給一個(gè)整數(shù)數(shù)組 coins 表示不同面額的硬幣,另給一個(gè)整數(shù) amount 表示總金額。

          • 計(jì)算并返回可以湊成總金額的硬幣組合數(shù)。如果任何硬幣組合都無法湊出總金額,返回 0 。

          • 假設(shè)每一種面額的硬幣有無限個(gè)。

          解題關(guān)鍵點(diǎn)

          • 經(jīng)典的動(dòng)態(tài)規(guī)劃問題。

          • 設(shè)置一個(gè)數(shù)組dp,其中每個(gè)元素dp[i]記錄的是,當(dāng)湊成金額為i時(shí),所有的硬幣組合的總數(shù)。則題目所求為dp[amount]。

          • 考慮基礎(chǔ)簡單的例子。有dp[0] = 1,也就是說,金額為0時(shí),只有1種選擇,就是什么硬幣都不取。

          • 考慮狀態(tài)轉(zhuǎn)移公式。從小到大遍歷金額數(shù),這樣,可以保證:當(dāng)我們計(jì)算金額i的硬幣組合數(shù)dp[i]時(shí),前面更少的金額的組合數(shù)比如dp[i-1]、dp[i-2]······等都已求出。

          • 那么,對任意的dp[i],面對某種硬幣的面額(記為coin),如果在湊成金額i時(shí)選擇了這枚硬幣,那么它也包含了湊成金額(i-coin)時(shí)的組合個(gè)數(shù)。而對不同面值的硬幣coin,都需要累加所有的組合個(gè)數(shù)。

          class?Solution(object):
          ????def?change(self,?amount,?coins):
          ????????"""
          ????????:type?amount:?int
          ????????:type?coins:?List[int]
          ????????:rtype:?int
          ????????"
          ""

          ????????dp?=?[0]*(amount+1)
          ????????dp[0]?=?1

          ????????for?coin?in?coins:
          ????????????sum_coin?=?coin
          ????????????
          ????????????while?sum_coin?<=?amount:
          ????????????????dp[sum_coin]?+=?dp[sum_coin-coin]
          ????????????????sum_coin?+=?1
          ????????
          ????????return?dp[amount]



          本文僅作學(xué)術(shù)分享??侵刪
          -------------END-------------
          往期閱讀

          深入淺出算法題(1)-動(dòng)態(tài)規(guī)劃前n個(gè)數(shù)字二進(jìn)制中1的個(gè)數(shù)

          深入淺出算法題(2)-回文子串個(gè)數(shù)之馬拉車算法

          (1)GAN改進(jìn)系列 | 最新ICCV2021生成對抗網(wǎng)絡(luò)GAN論文梳理匯總

          (2)最新ICCV 2021 | 圖像轉(zhuǎn)換生成對抗GAN匯總梳理

          最新 ICCV 2021 | GAN隱私保護(hù)(33)醫(yī)學(xué)圖像(34)生成對抗GAN

          最新 ICCV 2021 論文推薦

          【附下載】機(jī)器學(xué)習(xí)統(tǒng)計(jì)學(xué),476頁pdf

          【附下載】《面向機(jī)器學(xué)習(xí)的特征工程》.pdf

          【收藏】機(jī)器學(xué)習(xí)核心概念完全解析

          【附ppt與視頻】可解釋機(jī)器學(xué)習(xí)進(jìn)展,附ppt與視頻

          如果覺得有用,就點(diǎn)個(gè)“在看”吧?


          瀏覽 19
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  婷婷色五月激情综合网 | 国产无码一区二区 | 亚洲第一国产 黄AV动漫软件 | 日韩操逼一级片 | 小早川怜子一区二区三区 |