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

(没学懂,待填坑)【动态规划】数位动态规划

知识点

一 . 数位DP

数位DP是与数位相关的一类计数类DP,一般用于统计区间[l,r]满足特定条件的数位元素个数。数位指个位、十位、百位、千位等,数位DP指的就是在数位上进行动态规划。数位DP实质上就是有策略的枚举,子问题求解后进行记忆化搜索即可。

二 . 需要注意

① 记忆化 ②约束条件 ③高位前导0

三 . 数位DP模板


 模板题

1 . 洛谷 P4999 烦人的数学作业

思路:该题要求在区间内的数字各个数位相加所得的和,但是看数据范围1 \leqslant L \leqslant R \leqslant 10^{18},可以发现数据范围很大,不能通过暴力做法。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long 
using namespace std;
ll int T,l,r;
const int maxn=1e7+5,mod=1e9+7;
ll int dp[305][305],a[maxn];
inline ll int read()
{
	ll int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=(x<<1)+(x<<3)+(c^48);
		c=getchar();
	}
	return x*f;
}

inline ll int solve(ll int pos,ll int res,ll int limit)
{
	if(!pos) return res;
	if(!limit && dp[pos][res]!=-1) return dp[pos][res];
	int top=limit?a[pos]:9;
	ll int result=0;
	for(int i=0;i<=top;++i)
	{
		result=(result+solve(pos-1,res+i,limit && i==top))%mod;
	}
	if(!limit) dp[pos][res]=result;
	return result;
}

inline ll int make(ll int x)
{
	ll int num=0;
	while(x)
	{
	a[++num]=x%10;
	x/=10;	
	}
	return solve(num,0,1)%mod;
}

int main()
{
	T=read();
	memset(dp,-1,sizeof(dp));
	while(T--)
	{
		l=read(); r=read();
		printf("%lld\n",(make(r)-make(l-1)+mod)%mod);
	}
	return 0;
}

相关文章:

  • 小功能⭐️Unity判断是否单击到了UI
  • 常见的传输介质及其特性
  • 660——第一章
  • vue中计算属性computed的特性和应用
  • UAC实现原理
  • 【通信】Matlab实现多同步压缩变换
  • Element常用api webview
  • C语言结构体小栗子
  • 空间数据结构管理---RTree (下篇,代码实例)
  • 看我炫一下
  • Array.from(new Set)去重 与Array.map()
  • Go 学习笔记(89) — 接口类型变量的等值比较操作(nil 接口变量、空接口类型变量、非空接口类型变量)
  • dubbo源码解析之服务调用(通信)流程
  • Linux网络技术学习(四)—— 用户空间与内核的接口
  • Django--ORM 多表查询
  • JS 中的深拷贝与浅拷贝
  • 【译】理解JavaScript:new 关键字
  • android 一些 utils
  • in typeof instanceof ===这些运算符有什么作用
  • Java 多线程编程之:notify 和 wait 用法
  • Javascript设计模式学习之Observer(观察者)模式
  • jdbc就是这么简单
  • Joomla 2.x, 3.x useful code cheatsheet
  • React-生命周期杂记
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vue 重置组件到初始状态
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 跨域
  • 力扣(LeetCode)56
  • 前端面试总结(at, md)
  • 前端设计模式
  • 让你的分享飞起来——极光推出社会化分享组件
  • 首页查询功能的一次实现过程
  • 新版博客前端前瞻
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 原生js练习题---第五课
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • ​Linux·i2c驱动架构​
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (python)数据结构---字典
  • (二)丶RabbitMQ的六大核心
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (译) 函数式 JS #1:简介
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)大型网站架构演变和知识体系
  • (转载)(官方)UE4--图像编程----着色器开发
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET BackgroundWorker
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)