數位 dp

數位dp

特點

問題大多是指“在 [l,r][l,r][l,r] 的區間內,滿足……的數字的個數、種類,等等。”

但是顯然,出題人想要卡你,rrr 肯定是非常大的,暴力枚舉一定超時。

于是就有了數位 dp。

基本思路

數位 dp 說白了就是個數字(RRR? 進制下),從高位到地位依次填空。

若詢問區間為 [l,r][l,r][l,r],那么可以處理出 [0,r][0,r][0,r][0,l?1][0,l-1][0,l?1],相減即可。

顯然,一一枚舉是不可行的,不妨將其分為若干數位(這應該不可能被卡),每個數位討論。

在代碼中表現為:

設數組 aaaaia_iai? 表示在 RRR 進制下,數字 xxxiii 位的數字(位從 111 開始)。

注意到,如果前面填入的數字全部與上界 rrr 相同,那么這一位就不可以超過 rrr 的這一位。

那么就可以用一個變量 UpUpUp 表示目前是否與 rrr 完全相同,再進行記憶化搜索即可。

那么有了記憶化搜索(迭代)寫法就必然有遞推式寫法,畢竟記憶化搜索本質上就是 dp。

挑些例題

洛谷 P4999 煩人的數學作業

記憶化搜索顯然要有 dp 數組。

fi,jf_{i,j}fi,j? 表示在 不頂上界的情況下, 填數到前 iii 位,數字和為 jjj 的方案數,初始值為 ?1-1?1

代碼:

#include<bits/stdc++.h>
using namespace std;
const int N=25,Mod=1e9+7;
using ljl = long long;
int T,a[N];
ljl l,r,f[N][9*18+5];
ljl dfs(int st,bool Up,ljl sum)
{if(st<=0)//搜完了return sum;if(!Up&&f[st][sum]!=-1)//搜過了return f[st][sum];int UP=Up?a[st]:9;ljl ans=0;for(int k=0;k<=UP;++k)ans=(ans+dfs(st-1,(Up&&k==UP),sum+k))%Mod;if(!Up)f[st][sum]=ans;return ans;
}
ljl solve(ljl x)
{int lens=0;while(x>0)//搞定每一位。由于是倒著存,所以搜索時也要倒著搜{a[++lens]=x%10;x/=10;}return dfs(lens,1,0);
}
void Main()
{cin>>l>>r;cout<<(solve(r)-solve(l-1)+Mod)%Mod<<'\n';return;
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>T;memset(f,-1,sizeof(f));while(T--)Main();return 0;
}

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

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

相關文章

Selector的用法

Selector的用法 Selector是基于lxml構建的支持XPath選擇器、CSS選擇器&#xff0c;以及正則表達式&#xff0c;功能全面&#xff0c;解析速度和準確度非常高 from scrapy import Selectorbody <html><head><title>HelloWorld</title></head>&…

Netty封裝Websocket并實現動態路由

引言 關于Netty和Websocket的介紹我就不多講了,網上一搜一大片。現如今AI的趨勢發展很熱門,長連接對話也是會經常接觸到的,使用Websocket實現長連接,那么很多人為了快速開發快速集成就會使用spring-boot-starter-websocket依賴快速實現,但是注意該實現是基于tomcat的,有…

行為型設計模式:解釋器模式

解釋器模式 解釋器模式介紹 解釋器模式使用頻率不算高&#xff0c;通常用來描述如何構建一個簡單“語言”的語法解釋器。它只在一些非常特定的領域被用到&#xff0c;比如編譯器、規則引擎、正則表達式、SQL 解析等。不過&#xff0c;了解它的實現原理同樣很重要&#xff0c;能…

SaTokenException: 未能獲取對應StpLogic 問題解決

&#x1f4dd; Sa-Token 異常處&#xff1a;未能獲取對應StpLogic&#xff0c;typeuser&#x1f9e8; 異常信息 cn.dev33.satoken.exception.SaTokenException: 未能獲取對應StpLogic&#xff0c;typeuser拋出位置&#xff1a; throw new SaTokenException("未能獲取對應S…

Web前端性能優化原理與方法

一、概述 1.1 性能對業務的影響 大部分網站的作用是&#xff1a;產品信息載體、用戶交互工具或商品流通渠道。這就要求網站與更多用戶建立聯系&#xff0c;同時還要保持良好的用戶黏性&#xff0c;所以網站就不能只關注自我表達&#xff0c;而不顧及用戶是否喜歡。看看網站性…

第十八節:第六部分:java高級:注解、自定義注解、元注解

認識注解自定義注解注解的原理元注解常用的兩個元注解代碼&#xff1a; MyTest1&#xff08;注解類&#xff09; package com.itheima.day10_annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Retent…

北京科技企業在軟文推廣發稿平臺發布文章,如何精準觸達客戶?

大家好&#xff01;我是你們的老朋友&#xff0c;今天咱們聊聊北京科技企業如何通過軟文推廣發稿平臺精準觸達目標客戶這個話題。作為企業營銷的老司機&#xff0c;我深知在這個信息爆炸的時代&#xff0c;如何讓你的品牌聲音被目標客戶聽到是多么重要。下面就讓我來分享一些實…

UE蒙太奇和動畫序列有什么區別?

在 UE5 中&#xff0c;Animation Sequence&#xff08;動畫序列&#xff09;和 Animation Montage&#xff08;動畫蒙太奇&#xff09;雖然都能播放骨骼動畫&#xff0c;但它們的定位、功能和使用場景有較大區別&#xff1a;1. 概念定位Animation Sequence&#xff08;動畫序列…

Nordic打印RTT[屏蔽打印中的<info> app]

屏蔽打印中的 app Nordic原裝的程序答應是這樣的,這個有" app"打印,因為習慣問題,有時候也不想打印太多造成RTT VIEW顯示被沖點,所以要把" app"去掉:這里把prefix_process函數調用屏蔽到,主要涉及到nrf_log_hexdump_entry_process和nrf_log_std_entry_proc…

Python基礎和高級【抽取復習】

1.Python 的深拷貝和淺拷貝有什么區別&#xff1f; 淺拷貝【ls.copy()】&#xff1a; 將列表的不可變對象【值】復制一份&#xff0c;同時引用其中的可變對象【列表】&#xff0c;共用一個內存地址 深拷貝【lscopy.deepcopy(list)】&#xff1a; 完全的復制原可變對象&#xff…

TinyPiXOS組件開發(一):開發規范、組件開發方法介紹,快速上手組件開發,創造各種有趣的UI組件!

本文將通過實現一個點擊切換進度的電量指示燈組件和exampleGUI組件庫介紹如何基于TinyPiXOS開發新組件。主要內容包括組件開發規范、自定義組件開發和組件庫開發三部分。 組件開發規范 命名規范 采用tp開頭命名組件類&#xff0c;名稱具備易讀性。 目錄規范 頭文件放置 in…

主流熔斷方案選型指南

主流熔斷方案選型1. Netflix Hystrix (經典但已停止維護)適用場景&#xff1a;傳統Spring Cloud項目&#xff0c;需要快速集成熔斷功能優點&#xff1a;成熟穩定&#xff0c;社區資源豐富與Spring Cloud Netflix套件無縫集成提供熔斷、降級、隔離等完整功能缺點&#xff1a;已停…

Django中get()與filter()對比

在 Django 中&#xff0c;get() 和 filter() 是 QuerySet API 中用于檢索數據的兩個核心方法&#xff0c;它們的功能和使用場景有明顯區別。以下是詳細對比&#xff1a; 1. 核心區別特性get()filter()返回值單個對象&#xff08;模型實例&#xff09;查詢集&#xff08;QuerySe…

MySQL鎖(一) 概述與分類

1.1 MySQL鎖的由來 客戶端發往 MySQL 的一條條 SQL 語句&#xff0c;實際上都可以理解成一個個單獨的事務&#xff08;一條sql語句默認就是一個事務&#xff09;。而事務是基于數據庫連接的&#xff0c;每個數據庫連接在 MySQL 中&#xff0c;又會用一條工作線程來維護&#x…

PyTorch里的張量及張量的操作

張量的簡介 張量是多重線性映射在給定基下的坐標表示&#xff0c;可視為向量和矩陣的泛化。 0 維張量&#xff1a;標量&#xff08;如 5&#xff09;1 維張量&#xff1a;向量&#xff08;如 [1, 2, 3]&#xff09;2 維張量&#xff1a;矩陣&#xff08;如 [[1, 2], [3, 4]]&…

向量數據庫Faiss vs Qdrant全面對比

Faiss vs Qdrant 全面對比表 向量數據庫是一種相對較新的方式,用于與來自不透明機器學習模型(如深度學習架構)派生的抽象數據表示進行交互。這些表示通常被稱為向量或嵌入(embeddings),它們是用于訓練機器學習模型完成諸如情感分析、語音識別、目標檢測等任務的數據的壓…

2025年AIR SCI1區TOP,縮減因子分數階蜣螂優化算法FORDBO,深度解析+性能實測

目錄1.摘要2.蜣螂優化算法DBO原理3.改進策略4.結果展示5.參考文獻6.代碼獲取7.算法輔導應用定制讀者交流1.摘要 傳統DBO存在探索與開發能力失衡、求解精度低以及易陷入局部最優等問題。因此&#xff0c;本文提出了帶有縮減因子分數階蜣螂優化算法&#xff08;FORDBO&#xff0…

爬蟲逆向之JS混淆案例(全國招標公告公示搜索引擎 type__1017逆向)

案例https://ctbpsp.com/#/ 截至2025.07.19可用 定位加密位置 加密位置&#xff1a; 定位方式&#xff0c;XHR&#xff0c;跟棧 跟棧 QL打斷點&#xff0c;重新斷住 分析為&#xff0c;一個函數傳入四個參數 var QL QI[d9(Nv.mQ)](QJ, Qh, Qv, this[d9(Nv.m9)][0xa1a * …

Hive常用命令總結

一、數據庫操作 -- 創建數據庫&#xff08;默認路徑&#xff09; CREATE DATABASE IF NOT EXISTS myhive;-- 指定路徑創建數據庫 CREATE DATABASE myhive2 LOCATION /myhive2;-- 查看數據庫信息 DESC DATABASE myhive;-- 刪除數據庫&#xff08;強制刪除表&#xff09; DROP DA…

Spring整合MyBatis詳解

Spring整合MyBatis詳解一、整合優勢與核心思路1.1 整合優勢1.2 核心整合思路二、環境搭建與依賴配置2.1 開發環境2.2 Maven依賴配置三、整合配置&#xff08;核心步驟&#xff09;3.1 數據庫配置文件&#xff08;db.properties&#xff09;3.2 Spring配置文件&#xff08;sprin…