如何思考一個動態規劃問題需要幾個狀態?

如何思考一個動態規劃問題需要幾個狀態?

  • 第一步:思考 角色
  • 第二步:考慮 過去的影響
  • 第三步:畫出狀態轉移圖
  • 第四步:寫出狀態轉移方程
  • 第五步:驗證是否能覆蓋所有路徑 + 邊界
  • 幾個常見題目
  • 總結:

第一步:思考 角色

問自己:我當前的狀態可能有哪些不同的“角色”?

  • 比如買賣股票問題:

    • 有可能是持股、賣出、休息,→ 3 種角色
  • 背包問題:

    • 角色比較固定:容量 / 物品選擇

狀態數 ≈ 當前時刻下,決策行為或狀態的枚舉情況

第二步:考慮 過去的影響

問自己:我做一個動作,會不會受到前一天某種特定狀態的限制?

  • 如果有“冷凍期”,說明不是所有狀態之間都能直接轉移 → 你就需要引入“冷凍”這個額外狀態

  • 如果只有買賣無限制,兩個狀態就夠(持股 / 不持股)

狀態數 ≈ 為了準確區分不同限制路徑,你需要多少“分支狀態”來表示

第三步:畫出狀態轉移圖

手動畫出:

  • 節點 = 狀態

  • 邊 = 狀態轉移(由什么轉到什么)

如果畫出狀態圖后,發現某個狀態沒有前驅或不影響結果,那說明可能是冗余狀態,可以刪去

第四步:寫出狀態轉移方程

通過寫遞推公式,你會發現:

  • 如果公式里無法統一表達當前動作,可能因為狀態粒度不夠細

  • 如果寫著寫著發現狀態分不清,可能因為狀態定義太模糊,需要拆分更多狀態

第五步:驗證是否能覆蓋所有路徑 + 邊界

確認:

  • 所有可能的行為(買、賣、等)都能用已有狀態表示

  • 邊界條件(第一天、最后一天)狀態是否有明確初始化

幾個常見題目

題目 / 問題類型狀態數狀態解釋
買賣股票(無限次,無限制)2持股 / 不持股
買賣股票(含冷凍期)3持股 / 賣出 / 冷凍
買賣股票(最多兩次)4第一次買 / 第一次賣 / 第二次買 / 第二次賣
0-1 背包問題1 或 2一維表示容量,或二維加物品維度
打家劫舍(不能偷連續兩家)2偷/不偷

總結:

“狀態由角色定,變化看限制,畫出狀態圖看轉移是否清晰,冗余是否可合并。”

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

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

相關文章

【每天一個知識點】生成對抗聚類(Generative Adversarial Clustering, GAC)

📘 生成對抗聚類(Generative Adversarial Clustering, GAC) 一、研究背景與動機 聚類是無監督學習中的核心任務。傳統方法如 K-means、GMM、DBSCAN 等難以適應高維、非線性、復雜結構數據。 生成對抗聚類(GAC) 融合…

Qt 窗口 工具欄QToolBar、狀態欄StatusBar

每日激勵:“不設限和自我肯定的心態:I can do all things。 — Stephen Curry” 緒論?: 一段時間沒有更新,這段時間一直在忙各種事情,后續將再次上路持續更新C相關知識 本章將繼續前面的QT篇章,本章主要講…

FFmpeg——參數詳解

FFmpeg參數詳解一、基本命令結構1.1、查詢參數1.1.1、version1.1.2、buildconf1.1.3、devices1.1.4、formats1.1.5、muxers1.1.6、demuxers1.1.7、codecs1.1.8、decoders1.1.9、encoders1.1.10、bsfs1.1.11、protocols1.1.12、filters1.1.13、pix_fmts1.1.14、layouts1.1.15、s…

流媒體傳輸:RTSP傳輸詳解(包含RTP,RTCP,RTSP詳解)

一、什么是 RTSP?協議 1.1 RTSP 協議簡介? RTSP,全稱實時流傳輸協議(Real Time Streaming Protocol),是一種位于應用層的網絡協議。它主要用于在流媒體系統中控制實時數據(如音頻、視頻等)的傳輸&#…

Python學習-----1.認識Python

目錄 前言 1.關于Python博客前期的內容 2.計算機基礎概念 2.1.什么是計算機? 2.2.什么是編程? 2.3.編程語言有哪些? 3.Python背景知識 3.1.Python是怎么來的? 3.2.Python都可以用來干什么? 3.3.Python的優缺點 3.4.Py…

MongoDB頻繁掉線頻繁斷開服務的核心原因以及解決方案-卓伊凡|貝貝|莉莉|糖果

MongoDB頻繁掉線頻繁斷開服務的核心原因以及解決方案-卓伊凡|貝貝|莉莉|糖果查看日志內容 :2025-07-22T17:05:20.2160800 I CONTROL [initandlisten] MongoDB starting : pid34231 port28018 dbpath/data/mongodb 64-bit hostVM-0-17-centos 2025-07-22T17:05:20.21…

VUE懶加載(4種方式)

第一種 使用 Webpack 的動態導入(Dynamic Imports)第二種 Vue Router 中的懶加載第三種 使用第三方庫第四種 使用 Vuex 進行異步數據加載雖然不是直接的懶加載,但你可以在組件內部或 Vuex store 中使用異步 action 來加載數據,確保…

【ROS1】09-ROS通信機制——參數服務器

目錄 一、參數服務器概念 二、參數操作 2.1 C實現 2.1.1 新增參數 2.1.2 修改參數 2.1.3 查詢參數 2.1.4 刪除參數 2.2 python實現 2.2.1 新增參數 2.2.2 修改參數 2.2.3 查詢參數 2.2.4 刪除參數 一、參數服務器概念 假設正在開發一個復雜的機器人應用&#xff0…

C#.NET dapper 詳解

簡介 Dapper 是由 Stack Overflow 團隊開發的一個簡單、高性能的微型 ORM(Object?Relational Mapper),僅幾千行代碼,依賴于 ADO.NET 的 IDbConnection,通過動態生成 IL 來映射結果到實體對象。 與 EF、NHibernate 這類…

【LeetCode 熱題 100】35. 搜索插入位置——二分查找(左閉右開)

Problem: 35. 搜索插入位置 給定一個排序數組和一個目標值,在數組中找到目標值,并返回其索引。如果目標值不存在于數組中,返回它將會被按順序插入的位置。 請必須使用時間復雜度為 O(log n) 的算法。 文章目錄整體思路完整代碼時空復雜度時間…

Python-初學openCV——圖像預處理(四)——濾波器

目錄 一、圖像噪點消除噪聲: 1、概念 2、均值濾波 3、方框濾波 4 、高斯濾波 5、中值濾波 6、雙邊濾波 7、總結 一、圖像噪點消除噪聲: 1、概念 指圖像中的一些干擾因素,通常是由圖像采集設備、傳輸信道等因素造成的,表現…

嵌入式系統可靠性設計

嵌入式系統可靠性設計硬件件可靠性設計1. 硬件設計原則2. 硬件設計注意問題2.1 引腳布局和走線2.2 元器件選擇和布局2.3 電源和地線分離2.4 EMI/EMC設計2.5 系統可靠性2.6 資源利用和擴展性軟件可靠性設計1. 設計原則1.1 模塊化設計1.2 冗余設計1.3 容錯設計1.4 實時性保障1.5 …

cJSON在STM32單片機上使用遇到解析數據失敗問題

我們在單片機上解析JSON格式時(比如在用云平臺物聯網開發時),可以直接使用cJson庫來完成自己的操作,而不需要單獨實現,具體使用方法可以搜一下。 cJson:一個基于 C 語言的 Json 庫,它是一個開源…

python3基礎語法梳理(三)

接上一篇博客 🎮 猜數字小游戲 - Python版 🧠 游戲規則: 系統隨機生成一個 1 到 10 的整數玩家輸入猜測的數字使用 if 語句判斷玩家猜得是否正確提示“猜對了”或“太大/太小了” import randomsecret_number random.randint(1, 10) att…

【docker】將已有mysql腳本導入鏡像內使用

準備SQL腳本將SQL腳本(如init.sql)放在宿主機目錄下,例如:/path/to/sql-scripts/init.sql啟動MySQL容器并掛載腳本使用 -v 參數將SQL腳本掛載到容器的初始化目錄:docker run --name mysql-container \-e MYSQL_ROOT_PA…

【機器學習深度學習】LLamaFactory微調效果與vllm部署效果不一致如何解決

目錄 前言 一、問題本質 1.1 問題說明 1.2 問題本質示意 二、常見原因 LLaMAFactory對話模板規則定義 模型對話模板定義規則 三、解決方法 提取代碼myset.py 創建jinja文件 安裝VLLM 運行VLLM 安裝運行open webui流程 四、流程梳理 前言 本文主要講述的主要內容…

Python入門構建網頁

用純 Python 構建 Web 應用 本教程將帶你從零開始,構建一個交互式的待辦事項清單。 fasthtml 的核心哲學是“回歸初心,大道至簡”。在當今復雜的前后端分離技術棧中 ,它提供了一條返璞歸真的路徑,旨在讓你能用純粹的 Python 構建從…

開源 Arkts 鴻蒙應用 開發(九)通訊--tcp客戶端

文章的目的為了記錄使用Arkts 進行Harmony app 開發學習的經歷。本職為嵌入式軟件開發,公司安排開發app,臨時學習,完成app的開發。開發流程和要點有些記憶模糊,趕緊記錄,防止忘記。 相關鏈接: 開源 Arkts …

Go的defer和recover

在 Go 語言中,defer 和 recover 是兩個緊密相關的關鍵字,主要用于錯誤處理和資源清理。它們通常一起使用,特別是在處理panic(運行時崩潰)時,確保程序不會直接崩潰,而是能夠優雅地恢復并繼續執行…

Spring Boot 配置文件常用配置屬性詳解(application.properties / application.yml)

前言 Spring Boot 的一大優勢就是通過簡單的配置文件即可快速定制應用行為,而無需編寫大量 XML 配置或 Java 代碼。Spring Boot 使用 application.properties 或 application.yml 作為核心配置文件,支持豐富的配置屬性。 本文將詳細介紹 Spring Boot 常用…