如何進行選擇。

初始理解問題

首先,我們需要明確題目在問什么。題目“House Robber”描述的是一個強盜在一排房屋前,每個房屋都有一定數量的錢。強盜不能連續搶劫兩個相鄰的房屋,否則會觸發警報。目標是搶劫到最多的錢。

動態規劃的思路

這個問題可以使用動態規劃(Dynamic Programming, DP)來解決。動態規劃是一種分階段解決問題的方法,通常用于具有重疊子問題和最優子結構性質的問題。在這里,我們需要找到在不能連續搶劫兩個相鄰房屋的情況下,能夠獲得的最大金額。

DP數組的定義

在給定的代碼中,dp是一個數組,其中dp[i]表示到達第i個房屋時能夠搶劫到的最大金額。這里的“到達”并不意味著一定要搶劫第i個房屋,而是表示在前i個房屋中,按照規則能夠獲得的最大金額。

DP數組的初始化

  1. 基本情況1:沒有房屋(nums.empty()
    如果沒有房屋,那么能搶劫的最大金額自然是0。

    if (nums.empty()) {return 0;
    }
    
  2. 基本情況2:只有一個房屋(size == 1
    如果只有一個房屋,那么只能搶劫這個房屋,最大金額就是nums[0]

    if (size == 1) {return nums[0];
    }
    
  3. 基本情況3:兩個房屋
    如果有兩個房屋,強盜不能同時搶劫這兩個房屋,所以選擇金額較大的那個。

    dp[0] = nums[0];
    dp[1] = max(nums[0], nums[1]);
    

DP遞推關系

對于第i個房屋(i >= 2),有兩個選擇:

  1. 搶劫第i個房屋
    如果搶劫第i個房屋,那么不能搶劫第i-1個房屋。因此,最大金額為dp[i-2] + nums[i](即前i-2個房屋的最大金額加上當前房屋的金額)。

  2. 不搶劫第i個房屋
    如果不搶劫第i個房屋,那么最大金額與前i-1個房屋的最大金額相同,即dp[i-1]

為了最大化總金額,我們選擇這兩種情況中的較大值:

dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);

示例解析

假設nums = [2, 7, 9, 3, 1]

  1. 初始化:

    • dp[0] = 2(只有第一個房屋)
    • dp[1] = max(2, 7) = 7(第一或第二個房屋,選較大的)
  2. 計算dp[2]

    • 搶劫第三個房屋:dp[0] + nums[2] = 2 + 9 = 11
    • 不搶劫第三個房屋:dp[1] = 7
    • dp[2] = max(11, 7) = 11
  3. 計算dp[3]

    • 搶劫第四個房屋:dp[1] + nums[3] = 7 + 3 = 10
    • 不搶劫第四個房屋:dp[2] = 11
    • dp[3] = max(10, 11) = 11
  4. 計算dp[4]

    • 搶劫第五個房屋:dp[2] + nums[4] = 11 + 1 = 12
    • 不搶劫第五個房屋:dp[3] = 11
    • dp[4] = max(12, 11) = 12

最終,dp = [2, 7, 11, 11, 12],返回dp[4] = 12

為什么這樣定義dp[i]

dp[i]表示“考慮前i+1個房屋(因為索引從0開始)時能夠獲得的最大金額”。這個定義允許我們通過子問題的解來構建更大問題的解,這是動態規劃的核心思想。具體來說:

  • dp[i]依賴于dp[i-1]dp[i-2],這表示當前的最大金額取決于前一個房屋和前兩個房屋的最大金額。
  • 通過這種方式,我們可以確保不連續搶劫兩個相鄰的房屋,因為如果搶劫了i,就會跳過i-1,使用dp[i-2]

時間復雜度和空間復雜度

  • 時間復雜度:O(n),因為我們只需要遍歷一次nums數組。
  • 空間復雜度:O(n),因為我們使用了一個大小為ndp數組。實際上,可以優化到O(1)空間,因為dp[i]只依賴于dp[i-1]dp[i-2],可以用兩個變量代替整個數組。

可能的優化

可以優化空間復雜度,只保留前兩個狀態:

int rob(vector<int>& nums) {int prev = 0, curr = 0;for (int num : nums) {int temp = curr;curr = max(prev + num, curr);prev = temp;}return curr;
}

這樣,空間復雜度降為O(1)。

總結

  • dp[i]表示“在前i+1個房屋中,按照規則能夠搶劫到的最大金額”。
  • 通過比較“搶劫當前房屋”和“不搶劫當前房屋”兩種情況的最大值來更新dp[i]
  • 初始化dp[0]dp[1]作為基礎情況。
  • 最終結果是dp[n-1],其中n是房屋的數量。

這種方法確保了我們在每一步都做出最優的選擇,從而在全局上得到最大的搶劫金額。

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

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

相關文章

PHP語法高級篇(三):Cookie與會話

Cookie與會話在 Web 編程中十分實用&#xff1a;Cookie 能實現一周免登錄&#xff0c;還能記住用戶的主題偏好&#xff1b;會話可保存當前用戶信息&#xff0c;也能臨時存儲購物車數據。本篇文章將記錄Cookie與會話的學習過程。 一、Cookie cookie 常用于識別用戶。cookie 是服…

11. JVM中的分代回收

1. JVM介紹和運行流程-CSDN博客 2. 什么是程序計數器-CSDN博客 3. java 堆和 JVM 內存結構-CSDN博客 4. 虛擬機棧-CSDN博客 5. JVM 的方法區-CSDN博客 6. JVM直接內存-CSDN博客 7. JVM類加載器與雙親委派模型-CSDN博客 8. JVM類裝載的執行過程-CSDN博客 9. JVM垃圾回收…

基于PaddleOCR的營業執照識別與數據分析系統

基于PaddleOCR的營業執照識別與數據分析系統 1. 項目概述 本項目旨在利用百度PaddleOCR技術識別營業執照圖片中的關鍵信息,結合自然語言處理(NLP)和卷積神經網絡(CNN)對OCR結果進行分類處理,最后對識別出的收入流水數據進行深度分析與可視化展示。系統將實現從圖像識別到數…

SpringBoot JSON字典序列化翻譯

&#x1f9e9; 一、效果預期 Data public class UserVO {private String status;DictTranslate(type "user_status")private String statusName; }最終返回 JSON&#xff1a; {"status": "1","statusName": "啟用" }&#…

基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一個WebUI自動化框架(5)失敗用例截圖與重試

在UI自動化測試用例執行過程中&#xff0c;經常會有很多不確定的因素導致用例執行失敗&#xff0c;比如網絡原因、環境問題等&#xff0c;所以我們有必要引入重試機制&#xff08;失敗重跑&#xff09;&#xff0c;來提高測試用例執行穩定性。準備工作&#xff1a;我們在進行失…

【Oracle】centos7靜默安裝oracle19c

靜默安裝三步驟&#xff1a; 1、數據庫安裝db_install.rsp&#xff08;數據庫軟件安裝響應文件&#xff09;2、配置監聽netca.rap&#xff08;監聽配置響應文件&#xff09;3、建庫dbca.rsp&#xff08;建庫響應文件&#xff09;安裝oracle19c先決條件準備&#xff1a; 1.檢查主…

MCP基礎知識二(實戰通信方式之Streamable HTTP)

介紹 MCP 使用 JSON-RPC 2.0 作為其傳輸格式。傳輸層負責將 MCP 協議消息轉換為 JSON-RPC 格式進行傳輸&#xff0c;并將接收到的 JSON-RPC 消息轉換回 MCP 協議消息。其中SSE被廢棄了&#xff08;Server-Sent Events (SSE) - Deprecated&#xff09; SSE as a standalone tra…

量子計算與AI的融合:開啟智能革命的“量子躍遷”新范式

當量子計算的并行算力與人工智能的深度學習能力相遇,一場顛覆傳統認知的技術革命正在醞釀。從藥物研發到自動駕駛,從金融風控到氣候預測,兩者的融合不僅突破了經典計算的算力天花板,更催生出全新的算法范式與產業生態。本文將深入解析量子計算與AI融合的技術邏輯、核心突破…

【氮化鎵】不同偏壓應力下電荷俘獲效應導致的P-GaN HEMT閾值電壓不穩定性

2022年12月7日,意大利國家研究委員會微電子與微系統研究所的Giuseppe Greco等人在《Applied Physics Letters》期刊發表了題為《Threshold voltage instability by charge trapping effects in the gate region of p-GaN HEMTs》的文章,基于對p-GaN高電子遷移率晶體管(HEMTs…

ONLYOFFICE深度解鎖系列.10-如何識別圖像和PDF掃描件中的文本?用ONLYOFFICE的AI OCR輕松搞定!

ONLYOFFICE 文檔版本 9.0帶來多項 AI 關鍵改進&#xff0c;顯著提升您處理電子表格和 PDF 文件的工作效率。本指南將重點介紹新增的 OCR 功能&#xff0c;并講解如何在 PDF 編輯器中利用 AI 助手將圖像轉為可編輯文本。什么是 OCR 文字識別&#xff1f;OCR 技術能夠掃描各類文檔…

單例模式詳解:確保一個類只有一個實例

在軟件開發中&#xff0c;設計模式是解決常見問題的經典方案。單例模式&#xff08;Singleton Pattern&#xff09;作為創建型設計模式中最簡單也最常用的一種&#xff0c;確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。本文將全面探討單例模式的概念、多種實現方式…

Appdynamic 配置 PostgreSQL 收集器

配置 PostgreSQL 收集器 您可以使用數據庫可見性監控任何版本的 PostgreSQL。 連接詳細信息 部分場地描述創建新的收集器數據庫類型您想要監控的數據庫類型。代理人管理收集器的數據庫代理。收藏家姓名您想要用來識別收集器的名稱。連接詳細信息主機名或 IP 地址運行數據庫的機…

其他常見 HTTP 方法

除了最常用的四種方法&#xff08;GET、POST、PUT、DELETE&#xff09;&#xff0c;HTTP 協議還定義了一些較少使用但非常有用的請求方法&#xff0c;常用于調試、部分更新、跨域預檢等場景。1. HEAD 方法&#xff1a;獲取響應頭 特點&#xff1a; 用途&#xff1a;與 GET 類似…

Web應用防火墻(WAF)技術

目錄 一&#xff1a;簡介 1.1 Web安全現狀 1.2 傳統防御的局限性 二&#xff1a;Web應用防火墻技術解析 2.1 WAF核心架構 2.2 關鍵技術特性 三&#xff1a;WAF必要性 3.1 典型防護場景 3.2 與傳統方案對比 四&#xff1a;進階防護方案 4.1 智能WAF架構 4.2 關鍵技術…

機器學習之線性回歸(七)

機器學習之線性回歸&#xff08;七&#xff09; 文章目錄機器學習之線性回歸&#xff08;七&#xff09;一、線性回歸線性回歸超全指南&#xff1a;從“一條直線”到“正則化調參”的完整旅程0. 先對齊語言&#xff1a;標稱型 vs 連續型1. 問題形式化2. 損失函數全景3. 求解方法…

基于開源AI大模型、AI智能名片與S2B2C商城小程序源碼的用戶價值引導與核心用戶沉淀策略研究

摘要&#xff1a;在數字化商業生態中&#xff0c;用戶留存與核心用戶培育是產品成功的關鍵。本文聚焦開源AI大模型、AI智能名片與S2B2C商城小程序源碼的協同應用&#xff0c;探討如何通過技術賦能實現用戶價值引導與核心用戶沉淀。研究結合工業品供應鏈、美妝品牌、健康食品行業…

課題申報書成功率提升85%!借助大模型AI精準選題、搭綜述框架及提煉創新點(附實操AI提示詞)

大家好,感謝關注。我是七哥,一個在高校里不務正業,折騰用大模型AI實操的學術人。可以添加七哥(qige500)交流學術寫作或ChatGPT、Claude等學術大模型AI領域相關問題,多多交流,相互成就,共同進步。 寫一份高質量的課題申報書往往面臨許多困難,對很多同仁來說,難就難在…

Spring之【寫一個簡單的IOC容器EasySpring】

目錄 EasySpring 注解 EasyAutowired EasyComponent EasyComponentScan EasyLazy EasyPostConstruct EasyProtoType EasyValue Bean定義信息 EasyBeanDefinition 管理Bean定義信息 EasyBeanDefinitionRegister Aware EasyAware EasyBeanFactoryAware EasyBea…

Selenium動態網頁爬蟲編寫與解釋

使用Selenium來抓取動態網頁。動態網頁通常是指那些通過JavaScript動態加載內容的網頁&#xff0c;這些內容在初始HTML中并不存在&#xff0c;因此使用傳統的requests庫無法獲取到這些動態生成的內容。Selenium可以模擬瀏覽器行為&#xff0c;等待JavaScript執行并渲染頁面&…

element el-table中使用el-image圖片預覽被其他表格遮擋

或者::v-deep .el-table__cell {position: static !important;}