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

[一本通提高数位动态规划]数字游戏:取模数题解

[一本通提高数位动态规划]数字游戏:取模数题解

    • 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+dpi1,l,mods(kj)
其中 m o d s ( k − j ) mods(k-j) mods(kj)等价于 ( ( k − j ) m o d n + n ) m o d n ((k-j)modn+n) mod n ((kj)modn+n)modn,这样可以防止出现负数

5数位dp-part2利用状态求解

我们首先考虑一个数 23456 23456 23456
可以将其分解为 0 − 19999 0-19999 019999 20000 − 23456 20000-23456 2000023456两个区间
0 − 19999 0-19999 019999我们预处理过了,方案数等于
∑ 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 11之后传到函数里的参数为 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!

相关文章:

[一本通提高数位动态规划]数字游戏:取模数题解

[一本通提高数位动态规划]数字游戏&#xff1a;取模数题解 1前言2问题3状态的设置4数位dp-part1预处理5数位dp-part2利用状态求解6代码7后记 1前言 本文为数字游戏&#xff1a;取模数的题解 需要读者对数位dp有基础的了解&#xff0c;建议先阅读 论数位dp–胎教级教学 B3883 […...

[Day 39] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈的安全性分析 區塊鏈技術已經成為現代數字經濟的一個重要組成部分&#xff0c;提供了去中心化、透明和不可篡改的數據存儲與交易系統。然而&#xff0c;隨著區塊鏈技術的廣泛應用&#xff0c;其安全性問題也日益受到關注。本篇文章將詳細探討區塊鏈技術的安全性&#xf…...

OpenStack入门体验

一、云计算概述 1.1什么是云计算 云计算(cloud computing)是一种基于网络的超级计算模式,基于用户的不同需求&#xff0c;提供所需的资源&#xff0c;包括计算资源、存储资源、网络资源等。云计算服务运行在若干台高性能物理服务器之上&#xff0c;提供每秒 10万亿次的运算能力…...

预测未来 | MATLAB实现RF随机森林多变量时间序列预测未来-预测新数据

预测未来 | MATLAB实现RF随机森林多变量时间序列预测未来-预测新数据 预测效果 基本介绍 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法。如果用图来表示他们之间的关系如下: 随机森林是由很多决策树构成的,不同决策树之间没有关联。当我们进行…...

iOS 系统提供的媒体资源选择器(UIImagePickerController)

简介 图片或者视频的选择功能几乎是每个APP必不可少的&#xff0c;UIImagePickerController 是 iOS 系统提供的一个方便的媒体选择器&#xff0c;允许用户从照片库中选择图片或视频&#xff0c;或者使用相机拍摄新照片和视频。 它的页面简单易用&#xff0c;代码稳定可靠&…...

电脑如何扩展硬盘分区?告别空间不足困扰

在数字化时代&#xff0c;电脑硬盘的存储空间显得愈发重要。随着个人文件、应用程序和系统更新的不断累积&#xff0c;原有的硬盘分区可能很快就会被填满。为了解决这个问题&#xff0c;扩展硬盘分区成为了一个非常实用的方法。那么&#xff0c;电脑如何扩展硬盘分区呢&#xf…...

论文阅读: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&#xff1a;通过混合指令调优构建数学通才模型 摘要 我们介绍了MAmmoTH&#xff0c;一系列特别为通用数学问题解决而设计的开源大型语言模型&#…...

什么样的双筒式防爆器把煤矿吸引?

什么样的双筒式防爆器把煤矿吸引&#xff1f;要有好的服务和态度&#xff0c;要用心去聆听客户的需求&#xff0c;去解决客户的疑虑&#xff0c;用诚信去赢得客户的信任。 150产品的技术特点 双筒式防爆器采用双罐结构&#xff0c;其水封水位观测直观、能够快速有效排污、操作…...

如何保证冰河AL0 400G 100W 的稳定运行?

要保证冰河 AL0 400G 100w 的稳定运行&#xff0c;可以考虑以下几点&#xff1a; 1. 适宜的工作环境&#xff1a;确保设备放置在通风良好、温度适宜的环境中。良好的散热条件有助于防止设备过热&#xff0c;因为过热可能会导致性能下降或故障。该设备采用纯铝合金外壳&#xf…...

剪画小程序:巴黎奥运会,从画面到声音!

在巴黎奥运会的赛场上&#xff0c;每一个瞬间都伴随着独特的声音。那是观众的欢呼&#xff0c;是运动员冲刺的呐喊&#xff0c;是国歌奏响的激昂旋律。 如今&#xff0c;通过剪画音频提取&#xff0c;我们能够将这些珍贵的声音从精彩的画面中分离出来&#xff0c;单独珍藏。 想…...

【leetcode详解】心算挑战: 一题搞懂涉及奇偶数问题的 “万金油” 思路(思路详解)

前记&#xff1a; 做了几日的leetcode每日一题&#xff0c;几乎全是十分钟结束战斗的【中等】题&#xff0c;今日杀出来个【简单】题&#xff0c;反倒开始难以想出很清楚的解题思路&#xff0c;反复调试修改才将题目逐渐考虑全面&#xff0c;看到了原本思路的漏洞&#xff0c…...

【资料集】数据库设计说明书(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 是一种广泛使用的开源关系型数据库管理系统&#xff0c;其强大的查询语言为用户提供了丰富的数据处理能力。掌握 MySQL 的常用查询语句对于数据库管理和数据分析至关重要。本文将介绍一些 MySQL 中的常用查询语句&#xff0c;并提供实际的示例。 基础查询 1. 选择…...

hive的内部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)的区别

1.hive的表类型分为外部表和内部表 内部表和外部表的主要区别在于数据的存储方式。 外部表&#xff1a;外部表的存储在hdfs中&#xff0c;是我们指定的文件目录&#xff0c;当我们删除数据或者删除分区的时候不会将元数据删除&#xff0c;数据还会在hdfs目录中&#xff0c;我们…...

【AutoSar网络管理】验证ecu能够从RepeatMessage状态切换到ReadySleep

本专栏将为您提供: Autosar网络管理介绍,包括:状态迁移、状态行为、状态表现、切换条件、时间参数、消息类型等。DUT模拟节点介绍,包括:设计思路、代码展示、编写须知等。测试用例介绍,包括:测试内容、测试步骤、期望结果等。测试脚本介绍,包括:编写思路、代码展示、脚…...

js逻辑或(||)和且()

重点&#xff1a; JavaScript 中的逻辑运算符按照布尔逻辑进行计算&#xff0c;并且返回值是操作数本身 || ||:逻辑或&#xff0c;只要有一个表达式为真&#xff08;truthy&#xff09;&#xff0c;整个表达式就为真 逻辑或 (||) 的行为&#xff1a; ||运算符可以用来连接两个…...

ElasticSearch入门(六)SpringBoot2

private String author; Field(name “word_count”, type FieldType.Integer) private Integer wordCount; /** Jackson日期时间序列化问题&#xff1a; Cannot deserialize value of type java.time.LocalDateTime from String “2020-06-04 15:07:54”: Failed to des…...

vue项目Nginx部署启动

1.vue打包 &#xff08;1&#xff09;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代码 构建项目&#xff0c;初始代码运行就会报错。我使用的是Android Studio Giraffe&#xff08;Adroid-studio-2022.3.1.18-windows&#xff09;。我在网上找的解决办法是删除重复的类&#xff0c;但这操作起来真的太麻烦了。 这是全部报错代码&#xff1a; Dupli…...

filebeat

1、作用 1、可以在本机收集日志2、也可以远程收集日志3、轻量级的日志收集系统&#xff0c;可以在非java环境运行。logstash是在jmv环境中运行&#xff0c;资源消耗很大&#xff0c;启动一个logstash要消耗500M左右的内存&#xff0c;filebeat只消耗10M左右的内存。收集nginx的…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...