首页 > 其他分享 >【学习笔记】数位DP

【学习笔记】数位DP

时间:2024-09-17 11:12:53浏览次数:9  
标签:10 cur int lim 笔记 len calc DP 数位

数位DP

适用条件

此类题目一般要求在\([l,r]\)区间内满足条件的数的个数,答案一般与数的大小无关,而与数各位的组成有关。题目中给出的数的范围一般较大,往往在\(10^9\)以上因此无法暴力枚举,只能使用动态规划

代码实现

使用记忆化搜索更简单易于理解。
从数的高位向低位搜索,每一位可以为\(0-9\)。但是注意当搜索到第\(i\)位时,如果前\(i-1\)位已经是最大值时,那么当前的数也不能超过最值,即范围为

\[0-a[i] \]

因此记忆化搜索函数需要两个参数。
1.\(cur\)表示当前位于第\(cur\)位
2.\(lim\)表示前\(cur-1\)是否已经全部达到最大值。若\(lim_{cur+1}==1\),当且仅当

\[lim_{cur}==1,i==max \]

因为题目要求\([l,r]\)区间内满足条件的个数,由于个数满足区间可加性,因此可以用类似前缀和的方法来求。设\(calc(i)\)表示\(0-i\)区间内的个数,那么答案就是\(calc(r)-calc(l-1)\)

\(ACcode\)

\(DFS code\)

int dfs(int x,bool lim){
	if(x<=0)return 1;
	if(!lim&&f[x]!=-1)return f[x];
	int up=lim?a[x]:9;
	int ans=0;
	for(int i=0;i<=up;i++){
		if(i!=4)ans+=dfs(x-1,lim&&(i==up));
	}
	if(!lim)f[x]=ans;
	return ans;
}

初始化+\(calc\ code\)


int calc(int x){
	len=0;
	memset(f,-1,sizeof(f));
	while(x){
		a[++len]=x%10;
		x/=10;
	}
	return dfs(len,1);
}

标签:10,cur,int,lim,笔记,len,calc,DP,数位
From: https://www.cnblogs.com/GSNforces/p/18417002

相关文章

  • C/C++笔记
    C/CPP笔记杂记structmsg_train和typedefstructmsg_train大小不一样cstdio和stdio#include<stdio.h>intmain(){printf("Hello,World!\n");return0;}#include<cstdio>intmain(){std::printf("Hello,World!\n"......
  • 【自学笔记】支持向量机(2)——核函数
    引入  核函数的功能是将一组数据映射到更高维的特征空间,这样可以让在低维无法线性分类的数据能够在高维空间下被分类。  可以证明,如果原始数据是有限的维度,那么一定存在一个高维特征空间使得样本线性可分。  文章内容由《机器学习》相关内容,网络资源,GPT回答和个人......
  • 简单论述TCP,UDP,HTTP,SMTP,DNS,RTP之间的关系(计算机网络408)
            最近有很多同学在刚接触计算机网络概论的时候很容易被提及到IP,TCP,UDP....之类的东西,这里就简单论述一下他们是干什么的。                                                             ......
  • Linux实操笔记2 Ubuntu安装Nginx的不同方法
    今天来了解Ubuntu或者说Linux系统安装Nginx的几种办法。包括从Ubuntu的库安装到官方源码编译安装。一、Nginx是什么?以下是来自Nginx中文文档的内容。Nginx是一个高性能的Web和反向代理服务器,它具有有很多非常优越的特性:作为Web服务器:相比Apache,Nginx使用更少的......
  • C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(3)
    2.4、this指针    每个正常的成员函数调用都会隐含地传递一个指针给到对象,它就是被可能我的天this的隐藏参数。使用该指针访问数据成员或者调用成员函数,也可以将其传递给其他的成员函数或者函数。有时候它对消除有歧义的名字很有用。例如,可以给SpreadsheetCell类定义一个va......
  • C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(3)
    2.4、this指针    每个正常的成员函数调用都会隐含地传递一个指针给到对象,它就是被可能我的天this的隐藏参数。使用该指针访问数据成员或者调用成员函数,也可以将其传递给其他的成员函数或者函数。有时候它对消除有歧义的名字很有用。例如,可以给SpreadsheetCell类定义一个va......
  • 通过AI大模型现实小红书笔记克隆以及自动化发布
    文章目录前言一、实现思路二、实现步骤1.引入库2.自动登录3.生成笔记4.发布笔记三、界面演示总结前言对于文案小白来说,通过大模型可以轻松帮我们生成各种风格的文案,比如小红书风格的超萌文案。只需要简单几步操作,就能得到让你惊艳的结果。通过自动化的操作,还可以减......
  • Datawhale------Tiny-universe学习笔记——Qwen
    1.Qwen整体介绍    对于一个完全没接触过大模型的小白来说,猛一听这个名字首先会一懵:Qwen是啥。这里首先解答一下这个问题。下面是官网给出介绍:Qwen是阿里巴巴集团Qwen团队研发的大语言模型和大型多模态模型系列。其实随着大模型领域的发展,这类产品已经有很多了例如:由......
  • JUC学习笔记(一)
    文章目录一、进程与线程1.1进程与线程1)进程2)线程3)二者对比1.2并行与并发注意二、Java线程2.1创建和运行线程1)直接使用Thread2)使用Runnable配合Thread3)FutureTask配合Thread2.2查看进程线程的方法1)windows2)linux3)java2.3原理之线程运行栈与栈帧线程上下......
  • 聪明办法学Python丨202409TASK1学习笔记
        踏入Python编程的世界之初,我便深刻地体会到了这门语言的独特魅力。Python凭借其简洁明了的语法与强大的功能性,迅速吸引了我的注意。相较于C语言等编译型语言,Python的语法更加接近自然语言,这使得即使是初次接触编程的人也能快速上手。Python的设计理念强调代码的可......