[一本通提高数位动态规划]数字游戏:取模数题解
[一本通提高数位动态规划]数字游戏:取模数题解
- 1前言
- 2问题
- 3状态的设置
- 4数位dp-part1预处理
- 5数位dp-part2利用状态求解
- 6代码
- 7后记
1前言
本文为数字游戏:取模数的题解
需要读者对数位dp有基础的了解,建议先阅读
论数位dp–胎教级教学
B3883 [信息与未来 2015] 求回文数 数位dp题解
论进制类型的数位dp:胎教级教学
2问题
题目描述
定义一种取模数,满足各位数字之和 m o d N mod N modN为 0 0 0,指定一个整数闭区间 [ a , b ] [a,b] [a,b],问这个区间内有多少个取模数。
输入格式
题目有多组测试数据。每组只含 3 3 3个数字 a , b , N ( 1 < = a , b < = 2 31 , 1 < = n < 100 ) a, b, N (1 <= a, b <= 2^{31},1 <= n < 100) a,b,N(1<=a,b<=231,1<=n<100)。
输出格式
每个测试用例输出一行,表示各位数字和 m o d N mod N modN为 0 0 0 的数的个数。
看这个 a , b a,b a,b的范围,直接可以确定是数位dp,但是该怎么dp?
3状态的设置
我们发现,假设现在 n = 9 n = 9 n=9,那么我们在一个取模数的最高位前面加上一位 9 9 9,这个数依旧是取模数
在一个各位数字和 m o d 9 = 1 mod 9 = 1 mod9=1的情况下,在最前面插入一个 8 8 8,也产生了取模数
我们可以把不同位数的的取模数个数看成子问题,子问题可以转化为更大的问题(方式如上),这就满足的dp的条件
有了子问题和可转移的性质,我们可以设 d p i , j , k dp_{i,j,k} dpi,j,k为 i i i位 j j j开头,
各位之和 m o d n = k mod n = k modn=k的数的个数
属性显然为COUNT(加上子问题得到当前状态)
4数位dp-part1预处理
在 n n n固定的情况下, d p dp dp数组也是固定的,与 a , b a,b a,b无关
所以我们可以预处理 d p dp dp
首先,对于所有 d p i , j , k dp_{i,j,k} dpi,j,k, i = 1 i = 1 i=1的情况下,如果 k = j m o d n k = j mod n k=jmodn
则 d p i , j , k = 1 dp_{i,j,k} = 1 dpi,j,k=1,否则 d p i , j , k = 0 dp_{i,j,k} = 0 dpi,j,k=0
接下来就可以枚举 i , j , k i,j,k i,j,k,此外再枚举 l l l为上一位数字的情况
利用模运算转移,得状态转移方程
d p i , j , k = d p i , j , k + d p i − 1 , l , m o d s ( k − j ) dp_{i,j,k} =dp_{i,j,k}+dp_{i-1,l,mods(k-j)} dpi,j,k=dpi,j,k+dpi−1,l,mods(k−j)
其中 m o d s ( k − j ) mods(k-j) mods(k−j)等价于 ( ( k − j ) m o d n + n ) m o d n ((k-j)modn+n) mod n ((k−j)modn+n)modn,这样可以防止出现负数
5数位dp-part2利用状态求解
我们首先考虑一个数 23456 23456 23456
可以将其分解为 0 − 19999 0-19999 0−19999和 20000 − 23456 20000-23456 20000−23456两个区间
0 − 19999 0-19999 0−19999我们预处理过了,方案数等于
∑ d p 5 , j , 0 \sum dp_{5,j,0} ∑dp5,j,0对于此处情况 0 < = j < = 1 0<=j<=1 0<=j<=1
普遍的,此处的 0 < = j < = s i 0<=j<=s_{i} 0<=j<=si, s i s_{i} si为原数 i i i位
然后呢,我们可以把 3456 3456 3456看做子问题
第一位必然为 2 2 2,不为 2 2 2的情况已经得出
这样的话我们就可以打个标记,将已经固定的位数求和
但是我们这样一直缩小问题规模,会产生一个问题,会忽略边界值
这个也好办,我们特判最后标记变量如果被 n n n整除,就可以取到边界,答案 + 1 +1 +1
算法完成了,但是看到这的你可能会有一些问题,我来解答
1.为什么不处理前导 0 0 0
答:前导 0 0 0是合法的,因为处理方式是加和,所以 0 0 0相当于空位
2.如果左边界为 1 1 1怎么办, 1 − 1 1-1 1−1之后传到函数里的参数为 0 0 0
答:特判, 0 0 0本身合法,返回 1 1 1
6代码
有了如上思想,你就可以写出代码
附作者的代码(c++)
#include<bits/stdc++.h>
using namespace std;
long long a,b,n;
long long dp[20][20][200];
int mods(int x){return (x%n+n)%n;
}
void init(){memset(dp,0,sizeof(dp));for(int i = 0;i<=9;i++){dp[1][i][i%n]++;}for(int i = 2;i<=12;i++){for(int j = 0;j<=9;j++){for(int k = 0;k<n;k++){for(int l = 0;l<=9;l++){dp[i][j][k]+=dp[i-1][l][mods(k-j)];}}}}
}
int solve(int x){if(x==0){return 1;}int h = x,s[1145],idx = 0,ans = 0,res = 0;while(h){s[++idx] = h%10;h/=10;}for(int i = idx;i>=1;i--){for(int j = 0;j<s[i];j++){ans+=dp[i][j][mods(n-res)];}res+=s[i];res%=n;if(i==1&&res%n==0){ans++;}}return ans;
}
int main(){while(cin>>a>>b>>n){init();int ans = solve(b)-solve(a-1);cout<<ans<<endl;}return 0;
}
7后记
本题很好地展现了数位dp的精髓
预处理部分情况+分解子问题+特判
本文作者是蒟蒻,如有错误请各位神犇指点
森林古猿出品,必属精品,请认准CSDN森林古猿1!
相关文章:
[一本通提高数位动态规划]数字游戏:取模数题解
[一本通提高数位动态规划]数字游戏:取模数题解 1前言2问题3状态的设置4数位dp-part1预处理5数位dp-part2利用状态求解6代码7后记 1前言 本文为数字游戏:取模数的题解 需要读者对数位dp有基础的了解,建议先阅读 论数位dp–胎教级教学 B3883 […...
[Day 39] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
區塊鏈的安全性分析 區塊鏈技術已經成為現代數字經濟的一個重要組成部分,提供了去中心化、透明和不可篡改的數據存儲與交易系統。然而,隨著區塊鏈技術的廣泛應用,其安全性問題也日益受到關注。本篇文章將詳細探討區塊鏈技術的安全性…...
OpenStack入门体验
一、云计算概述 1.1什么是云计算 云计算(cloud computing)是一种基于网络的超级计算模式,基于用户的不同需求,提供所需的资源,包括计算资源、存储资源、网络资源等。云计算服务运行在若干台高性能物理服务器之上,提供每秒 10万亿次的运算能力…...
预测未来 | MATLAB实现RF随机森林多变量时间序列预测未来-预测新数据
预测未来 | MATLAB实现RF随机森林多变量时间序列预测未来-预测新数据 预测效果 基本介绍 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法。如果用图来表示他们之间的关系如下: 随机森林是由很多决策树构成的,不同决策树之间没有关联。当我们进行…...
iOS 系统提供的媒体资源选择器(UIImagePickerController)
简介 图片或者视频的选择功能几乎是每个APP必不可少的,UIImagePickerController 是 iOS 系统提供的一个方便的媒体选择器,允许用户从照片库中选择图片或视频,或者使用相机拍摄新照片和视频。 它的页面简单易用,代码稳定可靠&…...
电脑如何扩展硬盘分区?告别空间不足困扰
在数字化时代,电脑硬盘的存储空间显得愈发重要。随着个人文件、应用程序和系统更新的不断累积,原有的硬盘分区可能很快就会被填满。为了解决这个问题,扩展硬盘分区成为了一个非常实用的方法。那么,电脑如何扩展硬盘分区呢…...
论文阅读:Mammoth: Building math generalist models through hybrid instruction tuning
Mammoth: Building math generalist models through hybrid instruction tuning https://arxiv.org/pdf/2309.05653 MAmmoTH:通过混合指令调优构建数学通才模型 摘要 我们介绍了MAmmoTH,一系列特别为通用数学问题解决而设计的开源大型语言模型&#…...
什么样的双筒式防爆器把煤矿吸引?
什么样的双筒式防爆器把煤矿吸引?要有好的服务和态度,要用心去聆听客户的需求,去解决客户的疑虑,用诚信去赢得客户的信任。 150产品的技术特点 双筒式防爆器采用双罐结构,其水封水位观测直观、能够快速有效排污、操作…...
如何保证冰河AL0 400G 100W 的稳定运行?
要保证冰河 AL0 400G 100w 的稳定运行,可以考虑以下几点: 1. 适宜的工作环境:确保设备放置在通风良好、温度适宜的环境中。良好的散热条件有助于防止设备过热,因为过热可能会导致性能下降或故障。该设备采用纯铝合金外壳…...
剪画小程序:巴黎奥运会,从画面到声音!
在巴黎奥运会的赛场上,每一个瞬间都伴随着独特的声音。那是观众的欢呼,是运动员冲刺的呐喊,是国歌奏响的激昂旋律。 如今,通过剪画音频提取,我们能够将这些珍贵的声音从精彩的画面中分离出来,单独珍藏。 想…...
【leetcode详解】心算挑战: 一题搞懂涉及奇偶数问题的 “万金油” 思路(思路详解)
前记: 做了几日的leetcode每日一题,几乎全是十分钟结束战斗的【中等】题,今日杀出来个【简单】题,反倒开始难以想出很清楚的解题思路,反复调试修改才将题目逐渐考虑全面,看到了原本思路的漏洞,…...
【资料集】数据库设计说明书(Word原件提供)
2 数据库环境说明 3 数据库的命名规则 4 逻辑设计 5 物理设计 5.1 表汇总 5.2 表结构设计 6 数据规划 6.1 表空间设计 6.2 数据文件设计 6.3 表、索引分区设计 6.4 优化方法 7 安全性设计 7.1 防止用户直接操作数据库 7.2 用户帐号加密处理 7.3 角色与权限控制 8 数据库管理与维…...
MySQL 常用查询语句精粹
引言 MySQL 是一种广泛使用的开源关系型数据库管理系统,其强大的查询语言为用户提供了丰富的数据处理能力。掌握 MySQL 的常用查询语句对于数据库管理和数据分析至关重要。本文将介绍一些 MySQL 中的常用查询语句,并提供实际的示例。 基础查询 1. 选择…...
hive的内部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)的区别
1.hive的表类型分为外部表和内部表 内部表和外部表的主要区别在于数据的存储方式。 外部表:外部表的存储在hdfs中,是我们指定的文件目录,当我们删除数据或者删除分区的时候不会将元数据删除,数据还会在hdfs目录中,我们…...
【AutoSar网络管理】验证ecu能够从RepeatMessage状态切换到ReadySleep
本专栏将为您提供: Autosar网络管理介绍,包括:状态迁移、状态行为、状态表现、切换条件、时间参数、消息类型等。DUT模拟节点介绍,包括:设计思路、代码展示、编写须知等。测试用例介绍,包括:测试内容、测试步骤、期望结果等。测试脚本介绍,包括:编写思路、代码展示、脚…...
js逻辑或(||)和且()
重点: JavaScript 中的逻辑运算符按照布尔逻辑进行计算,并且返回值是操作数本身 || ||:逻辑或,只要有一个表达式为真(truthy),整个表达式就为真 逻辑或 (||) 的行为: ||运算符可以用来连接两个…...
ElasticSearch入门(六)SpringBoot2
private String author; Field(name “word_count”, type FieldType.Integer) private Integer wordCount; /** Jackson日期时间序列化问题: Cannot deserialize value of type java.time.LocalDateTime from String “2020-06-04 15:07:54”: Failed to des…...
vue项目Nginx部署启动
1.vue打包 (1)package.json增加打包命令 "scripts": {"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --host 10.16.14.110","start": "npm run dev","un…...
Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules。Android studio纯java代码报错
我使用java代码 构建项目,初始代码运行就会报错。我使用的是Android Studio Giraffe(Adroid-studio-2022.3.1.18-windows)。我在网上找的解决办法是删除重复的类,但这操作起来真的太麻烦了。 这是全部报错代码: Dupli…...
filebeat
1、作用 1、可以在本机收集日志2、也可以远程收集日志3、轻量级的日志收集系统,可以在非java环境运行。logstash是在jmv环境中运行,资源消耗很大,启动一个logstash要消耗500M左右的内存,filebeat只消耗10M左右的内存。收集nginx的…...
matlab y=sin(x) - 2/π*(x)函数绘制
[TOC](matlab ysin(x) - 2/π*(x)函数绘制) ysin(x) - 2/π*(x) clc; clear; close all; x_axis_length 10; y_axis_length 10; % 创建 x 值向量 x_positive linspace(0.1, 10, 1000); % 正半轴上的 x 值 x_negative linspace(-10, -0.1, 1000); % 负半轴上的 x 值% 计算…...
HyperDiffusion阅读
ICCV 2023 创新点 HyperDiffusion:一种用隐式神经场无条件生成建模的新方法。 HyperDiffusion直接对MLP权重进行操作,并生成新的神经隐式场。 HyperDiffusion是与维度无关的生成模型。可以对不同维度的数据用相同的训练方法来合成高保真示例。 局限性…...
分治思想 排序数组
题目 这是一道经典的关于分治思想的算法题,适合刚接触分治的小白。 . - 力扣(LeetCode) 思路 采用递归分治的思想,也就是快速排序的模拟,这里先确定每趟递归的作用: 在一个规定的区间内,随机…...
通用前端分页插件
/*** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>* 分页组件* >>>>>>>>>>>>>>>>>>>…...
jEasyUI 扩展编辑器
jEasyUI 扩展编辑器 jEasyUI 是一个基于 jQuery 的前端框架,它提供了一系列的组件,用于快速构建交互式的网页界面。这些组件包括布局、窗口、数据网格等,但有时候,开发者可能需要更多的定制化功能,这时候就需要使用 jEasyUI 的扩展编辑器。 什么是 jEasyUI 扩展编辑器 …...
腾讯课堂停服,付费课程怎么观看!!!
腾讯课堂十月1停服拉,大家的付费课程赶紧保存收获一波啊, 爬虫工程师手拿把掐啦!!!...
C# 桥接模式
栏目总目录 概念 桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与具体实现部分分离,使它们可以独立地变化。这种设计模式通过创建一个连接(桥)来将抽象和实现部分分离,从而允许…...
GPT-4o mini一手测评:懂得不多,但答得极快
在性能方面,GPT-4o mini 在 MMLU 上的得分为 82%,在 LMSYS 排行榜的聊天方面分数优于 GPT-4。 OpenAI 突然上线新模型 GPT-4o mini, 声称要全面取代 GPT-3.5 Turbo。 在性能方面,GPT-4o mini 在 MMLU 上的得分为 82%,在 LMSYS 排行榜的聊天方面分数优于 GPT-4。 在价格…...
Python面试题:结合Python技术,如何使用Pytest进行单元测试和集成测试
使用Pytest进行单元测试和集成测试是非常常见和有效的方法。下面是如何使用Pytest进行这些测试的详细指南。 安装Pytest 首先,使用pip安装Pytest: pip install pytest单元测试 单元测试用于测试单个模块或函数的功能。假设我们有一个简单的Python模块…...
Java面试必看!知己知彼才能百战百胜,如何做好面试前的准备?
随着 Java 这个赛道的不断内卷,这两年,Java 程序员的面试,从原来的常规八股文(有 标准答案)到现在,以项目、场景问题、技术深度思考为主,逐步转变成没有标准答案, 需要大家基于自己的…...
用dw做电子商务网站步骤/合肥百度竞价推广代理公司
python安装完成后,它的配置很简单,只需要配置下环境变量就可以了。 具体来讲,就是将python的安装目录加入到系统的path中即可。 没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与…...
原来做网站后来跑国外了/郴州网站seo
阅读目录Go 语言函数Go 语言函数章节目录Go 语言函数定义_声明_调用(超详细)一、定义一个普通函数1.1 函数名1.2 参数列表1.3 返回参数列表1.4 函数体二、参数列表简写三、函数返回值3.1 同一类型的返回值3.2 带有变量名的返回值四、调用函数Go 语言函数…...
宜春网站建设哪家专业/义乌最好的电商培训学校
原文地址:http://www.tuicool.com/articles/MzeM7r 本博文少许理论资料来至DBA技术大牛 http://blog.csdn.net/tianlesoftware/article/details/4717318 ,本着实践式学习,书写以下博文: 一、什么是分区表 Oracle提供了分区技…...
小程序定制开发团队/汕头seo不错
一、VBS语言基础 1.运算符和表达式 (1)运算符 (2)表达式 a.数学表达式:由算术运算符连接,计算结果为数字 b.字符串表达式:由字符串连接符连接&#x…...
重庆做网站的程序员待遇/苏州关键词搜索排名
拿一个小点的项目来说,不用管什么开发框架,页面中掺和数据库访问代码加逻辑实现代码,直接搞定即可 大一点的项目一般采用三层开发框架,前台表示层,基本逻辑层,数据访问层,数据库的设计... …...
网站APP推广/seo排名优化网站
一、Tomcat运行原理分析 1. Tomcat是运行在JVM中的一个进程。它定义为【中间件】,顾名思义,是一个在Java项目与JVM之间的中间容器。 2. Web项目的本质,是一大堆的资源文件和方法。Web项目没有入口方法(main方法),,意…...