第四十五天 | 322.零錢兌換

題目:322.零錢兌換

嘗試解答:

1.確定dp[j]含義:裝滿容量為j的背包所需要放的硬幣個數為dp[j];

2.動態轉移方程:dp[j] = dp[j - coins[i]] + 1;

3.遍歷順序:本題應該為組合類題目,不考慮裝入的順序,只在乎硬幣個數

? ? ? ? 所以先物品后背包,背包容量從小到大。(錯)

4.初始化:dp[0] = 1,其余均初始換為0

5.打印dp

代碼實現如下,有漏洞,執行不對:

class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, 0);dp[0] = 1;int result = INT_MAX;for(int i = 0; i < coins.size(); i++){for(int j = coins[i]; j <= amount; j++){// dp[j] = dp[j - coins[i]] + 1;// result = min(dp[j], result);if(j == amount){result = min(dp[j], result);}}}return result;}
};

正確思路:

1.確定dp[j]含義:裝滿容量為j的背包所需要最少放的硬幣個數為dp[j];

2.動態轉移方程:dp[j] = min(dp[j - coins[i]] + 1, dp[j]);

? ? ? ? 本輪要放的物品重量為coins[i],所以背包必須騰出coins[i]這么大的容量留給coins[i],所以之前背包裝的重量必須是dp[j - coins[i]]。裝了coins[i]后,一共裝了dp[j - coins[i]] + 1塊硬幣,與不裝coins[i] 的情況比大小,取其小,得到本輪循環的最優解,就是本次的最少個數。

3.初始化:

????????本題初始化比較取巧,之前不管是排列還是組合,dp[0]都初始化為了1,但這到題從測試樣例中可以看出,dp[0] = 0。

? ? ? ? 其他位置的值如何進行初始化?從本質入手,因為是取其小,必須將他們初始化為INT_MAX,才可以保證在二維數組的第一行可以成功更改值,不會被原來初始化的值覆蓋(解釋這一點時我習慣從二維數組的角度出發)。

? ? ? ? 其實道理和其他題目中,初始化為0的道理是一樣的,其他題目如果是取其大max,則初始化為0,只要沒有負數的情況,就可以保證能夠更新值,不會被覆蓋。

4.遍歷順序:

? ? ? ? 本題對遍歷順序無要求。

? ? ? ? 首先要分清楚題目類型:本題是求裝滿背包的最少個數,不是求裝滿背包有多少種方法,

所以這道題和排列組合無關,對遍歷順序無特殊要求。

? ? ? ? 只有題目問“方法數”時,才考慮排列還是組合,先背包還是先物品。

5.打印dp

代碼如下:

class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, INT_MAX);dp[0] = 0;for(int i = 0; i < coins.size(); i++){      //遍歷物品for(int j = coins[i]; j <= amount; j++){     //遍歷背包if(dp[j - coins[i]] != INT_MAX){dp[j] = min(dp[j - coins[i]] + 1, dp[j]);}}}if(dp[amount] == INT_MAX) return -1;return dp[amount];}
};

對于返回-1的條件不是很理解。

循環里的判斷條件:如果dp[j - coins[i]] != INT_MAX,那么是不可能通過目前遍歷到的物品將背包裝滿的。

返回值時進行的判斷:如果dp[amount] == INT_MAX,那么不可能將背包裝滿。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15745.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15745.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15745.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

精品PPT | 精益生產管理中MES系統的實現與應用(免費下載)

【1】關注本公眾號&#xff0c;轉發當前文章到微信朋友圈 【2】私信發送 MES系統的實現與應用 【3】獲取本方案PDF下載鏈接&#xff0c;直接下載即可。 如需下載本方案PPT/WORD原格式&#xff0c;請加入微信掃描以下方案驛站知識星球&#xff0c;獲取上萬份PPT/WORD解決方案&…

吃掉 N 個橘子的最少天數(Lc1553)——記憶化搜索

廚房里總共有 n 個橘子&#xff0c;你決定每一天選擇如下方式之一吃這些橘子&#xff1a; 吃掉一個橘子。如果剩余橘子數 n 能被 2 整除&#xff0c;那么你可以吃掉 n/2 個橘子。如果剩余橘子數 n 能被 3 整除&#xff0c;那么你可以吃掉 2*(n/3) 個橘子。 每天你只能從以上 …

Redis - 緩存場景

學習資料 學習的黑馬程序員嗶站項目黑馬點評&#xff0c;用作記錄和探究原理。 Redis緩存 緩存 &#xff1a;就是數據交換的緩沖區&#xff0c;是存儲數據的臨時地方&#xff0c;讀寫性能較高 緩存常見的場景: 數據庫查詢加速&#xff1a;通過將頻繁查詢的數據緩存起來&…

【挖金子game】

如果您想要編寫一個簡單的“挖金子”游戲代碼&#xff0c;可以使用Python這樣的編程語言來實現。以下是一個簡單的Python代碼示例&#xff0c;用于創建一個基本的“挖金子”游戲&#xff1a; import random # 游戲設置 max_gold 10 # 最大金子數量 max_digs 5 # 最大挖掘…

數據驅動(Data-Driven)和以數據為中心(Data-Centric)的區別

一、什么是數據驅動&#xff1f; 數據驅動&#xff08;Data-Driven&#xff09;是在管理科學領域經常提到的名詞。數據驅動決策&#xff08;Data-Driven Decision Making&#xff0c;簡稱DDD&#xff09;是一種方法論&#xff0c;即在決策過程中主要依賴于數據分析和解釋&…

Java基礎學習:java中的基礎注解

在Java中&#xff0c;有一些內置的&#xff08;或稱為“基礎”&#xff09;注解&#xff08;annotation&#xff09;&#xff0c;這些注解在Java標準庫中定義&#xff0c;并且具有特定的用途。以下是一些主要的Java內置注解&#xff1a; Override&#xff1a; 用于表示一個方法…

Keras深度學習框架第二十七講:KerasTuner超參數優化基礎

1、超參數優化概念 1.1 什么是超參數優化 超參數調優&#xff0c;也稱為超參數優化或參數調優&#xff0c;是尋找學習算法或模型最佳超參數組合的過程。超參數是在訓練過程開始之前設置的參數&#xff0c;模型無法直接從數據中學習這些參數。它們控制著學習算法的行為&#x…

NDIS小端口驅動開發(二)

初始化微型端口適配器 當網絡設備可用時&#xff0c;系統會加載所需的 NDIS 微型端口驅動程序。 隨后&#xff0c;即插即用 (PnP) 管理器向 NDIS 發送即插即用 IRP 來啟動設備。 NDIS 調用微型端口驅動程序的 MiniportInitializeEx 函數來初始化用于網絡 I/O 操作的適配器。 初…

嵩山為什么稱為三水之源

三水指黃河、淮河、濟河&#xff0c;這三條河流環繞在嵩山周邊。 黃河橫亙在嵩山北部&#xff0c;其支流伊洛河從西南方環繞嵩山&#xff0c;然后匯入黃河。濟河&#xff0c;古稱濟水&#xff0c;源自濟源王屋山&#xff0c;自身河道在東晉時代被黃河奪占&#xff0c;從此消失。…

畢設 大數據校園卡數據分析

文章目錄 0 前言1 課題介紹2 數據預處理2.1 數據清洗2.2 數據規約 3 模型建立和分析3.1 不同專業、性別的學生與消費能力的關系3.2 消費時間的特征分析 4 Web系統效果展示5 最后 0 前言 &#x1f525; 這兩年開始畢業設計和畢業答辯的要求和難度不斷提升&#xff0c;傳統的畢設…

職場不是掙錢

職場怎么不是掙錢&#xff1f; 曾經我也一直這么想&#xff0c;只要做好老板安排的事情&#xff0c;自然就可以掙到錢了。 目的應該是沒錯的&#xff0c;是掙錢。 只是做好活就能掙錢&#xff0c;好像想得有些簡單了。 畢竟每個人都在干活&#xff0c;為什么就該自己掙錢呢&a…

【vue2配置】Vue Router

Vue Router官網 1、npm install vue-router4 2、創建模塊&#xff0c;在src目錄小創/views/map/MapIndex.vue模塊和創router/index.js文件 3、在router/index.js配置路由 import Vue from "vue"; import Router from "vue-router"; // 引入模塊 const Ma…

C語言——在頭?件中#if、_STDC_等字?起什么作??

一、問題 通常&#xff0c;?些程序員都不會去研究頭?件中的內容是什么含義&#xff0c;總覺得亂亂的&#xff0c;有很多 #if、_STDC_、#line 等字符&#xff0c;那么這些字符都各代表什么呢&#xff0c;在頭?件中又起到什么作?呢&#xff1f; 二、解答 在頭?件中存在類似…

智慧校園建設的進階之路

智慧校園的建設現已到達了老練的階段&#xff0c;許多學校設備充滿著數字化信息&#xff0c;進出宿舍樓&#xff0c;校園一卡通體系會記載下學生信息&#xff0c;外來人員闖入會報警&#xff0c;翻開電腦就能查到學生是否在宿舍等……學生的學習和日子都充滿了數字化的痕跡。但…

C# WPF入門學習(三)

目錄 核心架構 核心組件和概念 1. XAML&#xff08;eXtensible Application Markup Language&#xff09; 2. 依賴屬性&#xff08;Dependency Properties&#xff09; 3. 路由事件&#xff08;Routed Events&#xff09; 4. 數據綁定 5. 命令&#xff08;Commands&…

itertools內置模塊的過濾妙用

itertools內置模塊的妙用 過濾源迭代器中的元素 Python內置itertools模塊里有一些函數可以過濾源迭代器中的元素。 islice islice可以在不拷貝數據的前提下&#xff0c;按照下標切割源迭代器。可以只給出切割的終點&#xff0c;也可以同時給出起點和終點&#xff0c;還可以…

MongoDB 覆蓋索引查詢:提升性能的完整指南

MongoDB 覆蓋索引查詢是一種優化數據庫查詢性能的技術&#xff0c;它通過創建適當的索引&#xff0c;使查詢可以直接從索引中獲取所需的數據&#xff0c;而無需訪問實際的文檔數據。這種方式可以減少磁盤 I/O 和內存消耗&#xff0c;提高查詢性能。 基本語法 在 MongoDB 中&a…

SQL練習題:2.4

建表 # 學生表 create table t_student (stu_id varchar(10),stu_name varchar(10),stu_age datetime,stu_sex varchar(10) );# 課程表 create table t_t_course (c_id varchar(10),c_name varchar(10),c_teaid varchar(10) );# 教師表 create table t_t_teacher (tea…

光速入門python的OpenCV

前言 歡迎來到我的博客 個人主頁:北嶺敲鍵盤的荒漠貓-CSDN博客 本文整理python的OpenCV模塊的關鍵知識點 爭取用最短的時間入門OpenCV 并且做到筆記功能直接復制使用 OpenCV簡介 不浪費時間的介紹: 就是類似于ps操作圖片。 至于為什么不直接用ps&#xff0c;因為只有程序能…

【找出滿足差值條件的下標 I】python

目錄 暴力題解 優化&#xff1a;滑動窗口維護大小值 暴力題解 class Solution:def findIndices(self, nums: List[int], indexDifference: int, valueDifference: int) -> List[int]:nlen(nums)for i in range(n):for j in range(n-1,-1,-1):if abs(i-j)>indexDiffere…