動態規劃-數位DP

今天開始做關于數位DP的問題,首先對于數位DP來說,這類問題難度較大,比較難理解,所以博主也會盡量講的更加詳細一些,來幫助大家更好地理解這里的相關知識。

前置知識:

1.首先對于數位DP來說,主要解決的是關于在一段數的范圍里,求解所含特殊條件的字符的數的個數。例如在[1,100]之間尋找包括7的數字個數。

2.數位dp的dp數組一般設置為dp[pos][snt][cnt],其中pos表示數字代表的位數,snt表示當前位數是否合法,cnt表示數位合法的個數。

3.一般數位dp中有bool形的limit參數,當limit=true時表示對當前數位有限制,后面的數字不能不能直接使用0-9作為處理,當limit=true時是不能用來做記憶化處理的。

從前有一個國王,他十分熱愛數字,他認為數字的優雅程度可以從它們的位數上體現出來。數字的“優雅程度”越高,就越能夠吸引他的眼球。他定義,只要一個正整數的十進制表示中包含不超過 3 個非零數字,就被認為是優雅的數字。例如,3、2000、123 是優雅的數字,而 4321、12306、120086 則不是。

這個國王曾經讓他的數學家尋找一定范圍內所有的優雅數字。但這些數學家并不滿足于簡單地列出這些數字,他們想要創造一個故事,使得這些數字更加有生命力、更加有意義。于是他們提出了一個挑戰:給出一個數字區間,計算其中有多少個優雅的數字。你能夠幫助這些數學家完成他們的任務嗎?

輸入格式

輸入包含多個測試用例。

每個測試用例的第一行包含一個整數?T (1≤T≤102),表示要考慮的數字區間的數量。

接下來?T?行,每行包含兩個整數 Li??和?Ri? (1≤Li?≤Ri?≤1018),表示一個區間的左右端點。

輸出格式

對于每個測試用例,輸出一個整數,表示相應區間中優雅數字的數量。

#include <bits/stdc++.h>
using namespace std;
using ll =long long;
ll dp[20][2][20];
int a[20];
ll dfs(int pos,bool snt,bool limit,int cnt){if(pos<0)return (int)(cnt<=3);if(!limit&&dp[pos][snt][cnt]!=-1)return dp[pos][snt][cnt];ll res=0;int up=limit?a[pos]:9;for(int i=0;i<=up;i++){res+=dfs(pos-1,snt||(i>0),limit&&(i==up),cnt+(i>0));}if(!limit)dp[pos][snt][cnt]=res;return res;
}ll f(ll b){int pos=0;while(b){a[pos++]=b%10;b/=10;}return dfs(pos-1,false,true,0);
}
int main()
{int t;cin>>t;while(t--){memset(dp,-1,sizeof(dp));ll a,b;cin>>a>>b;cout<<f(b)-f(a-1)<<'\n';}return 0;
}

分析

1.在數位動態規劃中,return (int)(cnt <= 3)?這行代碼是遞歸終止條件的核心邏輯,其作用是判斷當前構造的數字是否符合 “優雅數字” 的定義。當?pos < 0?時,表示已經處理完數字的所有位(例如,對于三位數?123pos?從最高位?2?遞減到?0,處理完最低位后?pos?變為?-1)。此時,遞歸需要返回一個結果,用于統計符合條件的數字數量。

2.為什么?limit == true?時不能記憶化?

假設我們正在處理數字?123,并遞歸到百位為?1(最高位)的狀態:

此時?limit == true,百位只能選?0?或?1。若百位選?0,后續的十位和個位可以任意選(0-9);若百位選?1,后續的十位只能選?0-2(受原數字?123?的限制)。

如果我們在?limit == true?時記錄了這個狀態的結果,當處理其他數字(如?456)時,同樣的狀態(例如?pos=2, st=true, cnt=1)可能會復用錯誤的結果(因為?456?的百位可以選?0-4,與?123?的限制不同)。

3.snt的作用:處理前置0,一般的數位dp中都會有snt用來處理前置0,但本道題因為都是正整數,所以并沒有處理前置0.

4.記憶化的本質:記錄已計算的狀態結果

關鍵點dp[pos][st][cnt]?存儲的是當前狀態在無限制(limit=false)時的結果。這個結果是在枚舉完當前位的所有可能取值并計算出總和后才能確定的,因此必須在遞歸調用結束并累加到?res?之后才能記錄。

今天的分享就到這里,關于這個類型的dp是比較難以理解的,希望大家可以收藏做做,麻煩大家多多關注,后續博主也將繼續分享相關的內容。

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

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

相關文章

總覽四級考試

別被“四級”這個龐然大物嚇到&#xff01;我們一起拆解它&#xff1a;?? &#x1f4cd; ??核心認知&#xff1a;四級是一場策略性考試&#xff01;?? 它不考智商&#xff0c;考的是??基礎英語能力 考試技巧 時間管理??。基礎可以通過努力補&#xff0c;技巧可以…

BSRR對比BRR對比ODR

? 三種操作方式的本質區別 寄存器功能原子操作特點BSRR同時支持置位(1)和復位(0)?? 是單指令完成任意位操作&#xff0c;無競爭風險ODR直接讀寫輸出狀態? 否需"讀-改-寫"&#xff0c;多線程/中斷中需關中斷保護BRR只能復位(0)?? 是僅清零功能&#xff0c;無置…

職坐標精選嵌入式AI物聯網開源項目

隨著嵌入式、AI與物聯網技術的深度融合&#xff0c;開源生態已成為開發者構建智能硬件解決方案的核心驅動力。本文將從嵌入式實時操作系統、多模態AI數據集及物聯網接入平臺三大維度切入&#xff0c;系統性梳理技術選型要點與實踐路徑。在嵌入式領域&#xff0c;重點解析低功耗…

Ubuntu系統 | 本地部署ollama+deepseek

1、Ollama介紹 Ollama是由Llama開發團隊推出的開源項目,旨在為用戶提供高效、靈活的本地化大型語言模型(LLM)運行環境。作為Llama系列模型的重要配套工具,Ollama解決了傳統云服務對計算資源和網絡連接的依賴問題,讓用戶能夠在個人電腦或私有服務器上部署和運行如Llama 3等…

【數據庫】關系數據庫標準語言-SQL(金倉)下

4、數據查詢 語法&#xff1a; SELECT [ALL | DISTINCT] <目標列表達式> [,<目標列表達式>] … FROM <表名或視圖名>[, <表名或視圖名> ] … [ WHERE <條件表達式> ] [ GROUP BY <列名1> [ HAVING <條件表達式> ] ] [ ORDER BY <…

基于YOLO-NAS-Pose的無人機象群姿態估計:群體行為分析的突破

【導讀】 應對氣候變化對非洲象的生存威脅&#xff0c;本研究創新采用無人機航拍結合AI姿態分析技術&#xff0c;突破傳統觀測局限。團隊在肯尼亞桑布魯保護區對比測試DeepLabCut與YOLO-NAS-Pose兩種模型&#xff0c;首次將后者引入野生動物研究。通過檢測象群頭部、脊柱等關鍵…

8.RV1126-OPENCV 視頻中添加LOGO

一.視頻中添加 LOGO 圖像大體流程 首先初始化VI,VENC模塊并使能&#xff0c;然后創建兩個線程&#xff1a;1.把LOGO灰度化&#xff0c;然后獲取VI原始數據&#xff0c;其次把VI數據Mat化并創建一個感興趣區域&#xff0c;最后把LOGO放感興趣區域里并把數據發送給VENC。2.專門獲…

AI+3D 視覺重塑塑料袋拆垛新范式:遷移科技解鎖工業自動化新高度

在工業自動化浪潮席卷全球的當下&#xff0c;倉儲物流環節的效率與精準度成為企業降本增效的關鍵戰場。其中&#xff0c;塑料袋拆垛作為高頻、高重復性的作業場景&#xff0c;傳統人工或機械臂操作面臨著諸多挑戰。遷移科技&#xff0c;作為行業領先的 3D 工業相機和 3D 視覺系…

MATLAB實戰:視覺伺服控制實現方案

以下是一個基于MATLAB的視覺伺服控制項目實現方案&#xff0c;結合實時圖像處理、目標跟蹤和控制系統設計。我們將使用模擬環境進行演示&#xff0c;但代碼結構可直接應用于真實硬件。 系統架構 圖像采集 → 目標檢測 → 誤差計算 → PID控制器 → 執行器控制 完整代碼實現 …

RequestRateLimiterGatewayFilterFactory

一、功能說明 RequestRateLimiterGatewayFilterFactory 是 Spring Cloud Gateway 的流量控制組件&#xff0c;用于實現 API 請求速率限制&#xff0c;核心功能包括&#xff1a; 限制單位時間內的請求數量&#xff08;如每秒10次&#xff09;防止服務被突發流量擊垮&#xff0…

鴻蒙倉頡語言開發實戰教程:購物車頁面

大家上午好&#xff0c;倉頡語言商城應用的開發進程已經過半&#xff0c;不知道大家通過這一系列的教程對倉頡開發是否有了進一步的了解。今天要分享的購物車頁面&#xff1a; 看到這個頁面&#xff0c;我們首先要對它簡單的分析一下。這個頁面一共分為三部分&#xff0c;分別是…

AXURE安裝+漢化-Windows

安裝網站&#xff1a;https://www.axure.com/release-history/rp9 Axure中文漢化包下載地址 鏈接:https://pan.baidu.com/s/1U62Azk8lkRPBqWAcrJMFew?pwd5418 提取碼:5418 下載完成之后&#xff0c;crtlc lang文件夾 到下載的Axure路徑下 雙擊點進這個目錄里面。ctrlv把lan…

【Oracle】視圖

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;Oracle 文章目錄 1. 視圖基礎概述1.1 視圖的概念與特點1.2 視圖的工作原理1.3 視圖的分類 2. 簡單視圖2.1 創建簡單視圖2.1.1 基本簡單視圖2.1.2 帶計算列的簡單視圖 2.2 簡單視圖的DML操作2.2.1 通過視圖進行INSERT操作2.2.2 通…

Lua和JS的垃圾回收機制

Lua 和 JavaScript 都采用了 自動垃圾回收機制&#xff08;GC&#xff09; 來管理內存&#xff0c;開發者無需手動釋放內存&#xff0c;但它們的 實現機制和行為策略不同。下面我們從原理、策略、優缺點等方面來詳細對比&#xff1a; &#x1f536; 1. 基本原理對比 特性LuaJa…

Kafka 的優勢是什么?

Kafka 作為分布式流處理平臺的核心組件&#xff0c;其設計哲學圍繞高吞吐、低延遲、高可擴展性展開&#xff0c;在實時數據管道和大數據生態中具有不可替代的地位。 一、超高吞吐量與低延遲 1. 磁盤順序 I/O 優化 突破磁盤瓶頸&#xff1a;Kafka 將消息持久化到磁盤&#xff…

車載診斷架構 --- DTC消抖參數(Trip Counter DTCConfirmLimit )

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

【C++】類的析構函數

類的析構函數 1. 作用&#xff1a;1.1 當對象的地址空間釋放的時候&#xff0c;會自動調用析構函數(對象可以主動調用析構函數)1.2 實際應用&#xff1a;往往用來做收尾工作 2. 語法規則&#xff1a;示例代碼&#xff1a;析構函數使用 1. 作用&#xff1a; 1.1 當對象的地址空…

重拾Scrapy框架

基于Scrapy框架實現 舔狗語錄百度翻譯 輸出結果到txt文檔 爬蟲腳本 from typing import Iterable, Any, AsyncIteratorimport scrapy import json from post.items import PostItemclass BaidufanyiSpider(scrapy.Spider):name "baidufanyi"allowed_domains [&quo…

【實例】事業單位學習平臺自動化操作

目錄 一、創作背景: 二、實現邏輯: 三、代碼分析【Deepseek分析】: 1) 主要功能 2)核心組件 2.1 GUI界面 (AutomationApp類) 2.2 瀏覽器自動化 2.3 平臺特定處理 3) 關鍵技術 4)代碼亮點 5)總結 四、運行截圖: 五、程序代碼: 特別聲明:***本代碼僅限編程學…

CSS篇-1

1. CSS 有哪些基本選擇器?它們的權重是如何表示的? 這是一個關于 CSS 基礎且極其重要的問題,因為它直接關系到我們如何精準地控制頁面元素的樣式,以及在樣式沖突時瀏覽器如何決定哪個樣式生效。理解 CSS 選擇器及其權重(或稱為“優先級”或“特殊性”),是編寫高效、可維…