当前位置: 首页 > news >正文

数位 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,l1],相减即可。

显然,一一枚举是不可行的,不妨将其分为若干数位(这应该不可能被卡),每个数位讨论。

在代码中表现为:

设数组 aaaaia_iai 表示在 RRR 进制下,数字 xxxiii 位的数字(位从 111 开始)。

注意到,如果前面填入的数字全部与上界 rrr 相同,那么这一位就不可以超过 rrr 的这一位。

那么就可以用一个变量 UpUpUp 表示目前是否与 rrr 完全相同,再进行记忆化搜索即可。

那么有了记忆化搜索(迭代)写法就必然有递推式写法,毕竟记忆化搜索本质上就是 dp。

挑些例题

洛谷 P4999 烦人的数学作业

记忆化搜索显然要有 dp 数组。

fi,jf_{i,j}fi,j 表示在 不顶上界的情况下, 填数到前 iii 位,数字和为 jjj 的方案数,初始值为 −1-11

代码:

#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.lryc.cn/news/594253.html

相关文章:

  • kafka生产端和消费端的僵尸实例以及解决办法
  • NumPy 库的基本运用
  • 服务器上的文件复制到本地 Windows 系统
  • 语音识别技术:从声音到文字的 AI 魔法
  • 【Linux】权限详解 权限本质、权限属性、su、sudo提权、chmod\chown\chgrp、文件类别
  • 【软件测试】使用ADB命令抓取安卓app日志信息(含指定应用)
  • imx6ull-系统移植篇11——U-Boot 移植(下)
  • 第三章-提示词-中级:进阶技巧与实践指南(12/36)
  • #SVA语法滴水穿石# (014)关于链式蕴含的陷阱
  • 【Linux】1. Linux操作系统介绍及环境搭建
  • golang踩坑之url不会decode问题
  • 深度学习图像分类数据集—八种贝类海鲜食物分类
  • 秒赤Haproxy配置算法
  • 【RK3576】【Android14】显示屏MIPI开发调试
  • 2025.7.20总结-实战演讲
  • 上海生物医药战略入主康华生物,康华生物开启高质量发展新篇章
  • Agentic-R1 与 Dual-Strategy Reasoning
  • 7.19-7.20 Java基础 | File类 I/O流学习笔记
  • 阶段1--Linux中的计划任务
  • VUE2 学习笔记2 数据绑定、数据代理、MVVM
  • AI开发 | 基于FastAPI+React的流式对话
  • 智能驾驶整体技术架构详解
  • Spring Boot总结
  • MPLS-LDP
  • Java 大视界 -- Java 大数据在智能教育在线学习平台用户活跃度提升与留存策略研究中的应用(354)
  • HarmonyOS 网络请求优化实战指南:从0到1写出流畅不卡顿的应用!
  • python doipclient库
  • Spark专栏开篇:它从何而来,为何而生,凭何而强?
  • 事务的传播行为,分别在spring和mysql中讲解
  • 神经网络:卷积层