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

数位DP——AcWing 1081. 度的数量

数位DP

定义

数位DP是一种动态规划技巧,特别适用于处理与数字的位操作相关的问题,如数字序列的计数、数字的生成等问题。它通过将问题分解为对每一位数字的独立考虑,从而简化问题复杂度,实现高效求解。

数位DP的核心思想是将原问题转化为对每一位数字进行决策的过程,利用动态规划的思想,从最低位向最高位(或相反)逐位考虑,每一步决策都基于当前已经确定的位数的信息。在这个过程中,通常会用一个状态表示当前处理到哪一位以及之前决策产生的某些约束条件(如数字大小、奇偶性等),并使用一个DP数组来记录到达每个状态的有效解的数量或方案。

运用情况

  1. 数字序列计数:例如,计算某个区间内满足特定条件的数的个数(如:包含偶数个1的数、不包含连续相同数字的数等)。
  2. 数字序列生成:找出所有满足给定条件的数字序列。
  3. 数字组合问题:比如,给定一个数字N,求所有由N的非空子集构成的数之和。
  4. 数字游戏问题:如,猜数字游戏中最小猜测次数等。

注意事项

  1. 状态定义:清晰准确地定义DP状态是关键,通常包括当前处理的位数、已使用的数字集合或限制条件等。
  2. 状态转移方程:根据问题的具体条件,合理设计从一位到下一位的转移逻辑,正确计算状态之间的转移。
  3. 初始化与边界条件:注意DP数组的初始化,尤其是处理最高位或最低位时的特殊处理。
  4. 遍历顺序:根据问题的特性选择从低到高还是从高到低遍历数字位,确保状态转移的正确性。
  5. 剪枝:对于一些问题,合理的剪枝可以大幅度减少计算量,提高效率。

解题思路

  1. 明确问题:首先要明确问题的具体要求,识别出需要根据数位进行决策的点。
  2. 状态定义:定义DP状态,通常涉及当前处理的位数、前导零的处理、已使用数字的限制等。
  3. 确定DP数组维度:根据状态定义,决定DP数组的维度和大小。
  4. 构建状态转移方程:分析如何从前一状态转移到当前状态,这一步是数位DP中最核心的部分。
  5. 实现与优化:编写代码实现DP算法,同时注意优化,如剪枝、记忆化等技巧以提高效率。
  6. 边界与初始值处理:确保DP过程的起始状态和边界条件被正确设置。
  7. 回溯构造答案(如果需要):在计数之外还需要具体方案时,需要根据DP过程回溯构造出满足条件的数字序列。

AcWing 1081. 度的数量   

题目描述

AcWing 1081. 度的数量 - AcWing

运行代码

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 35;int l, r, k, b;
int a[N], al;
int f[N][N];int dp(int pos, int st, int op) //op: 1=,0<
{//枚举到最后一位数位,是否恰有k个不同的1(也是递归的终止条件)if (!pos) return st == k;//记忆化搜索,前提是不贴着上界(可以枚举满这一位所有的数字)if (!op && ~f[pos][st]) return f[pos][st];//01数位dp,贴着上界时,本轮能枚举的最大数就是上界数位的数字和1之间的最小值int res = 0, maxx = op ? min(a[pos], 1) : 1;for (int i = 0; i <= maxx; i ++ ){if (st + i > k) continue;res += dp(pos - 1, st + i, op && i == a[pos]);}return op ? res : f[pos][st] = res;
}
int calc(int x)
{al = 0; memset(f, -1, sizeof f);        //模板的必要初始化步骤while (x) a[ ++ al] = x % b, x /= b;  //把x按照进制分解到数组中return dp(al, 0, 1);
}
int main()
{cin >> l >> r >> k >> b;cout << calc(r) - calc(l - 1) << endl;return 0;
}

代码思路

  1. 头文件引入:程序包括了iostreamcstringalgorithm,分别用于输入输出、内存操作和算法操作。

  2. 常量定义N定义了数组的最大大小,这里设置为35,意味着可以处理的数字范围是010^34

  3. 变量定义:定义了区间的左右边界lr,数字的个数k,底数b,以及用于存储数字分解的数组a和数组长度alf是一个二维数组,用于存储中间结果,实现记忆化搜索。

  4. 递归函数dp:这个函数是一个递归函数,用于计算在给定的数位pos,已经使用了st个不同的1,是否能够形成满足条件的数。参数op用于标识是否是边界条件。

  5. 分解函数calc:这个函数将输入的整数x按照底数b分解,然后调用dp函数计算满足条件的数的数量。

  6. 主函数main:读取输入,调用calc函数计算结果,并输出满足条件的数的数量。

改进思路

  1. 记忆化搜索:代码中已经使用了记忆化搜索,这有助于减少重复计算。但是,可以进一步优化记忆化搜索的逻辑,确保只存储必要的状态。

  2. 数组初始化:在使用memset初始化f数组时,使用-1作为初始值,这有助于在递归过程中检查某个状态是否已经被计算过。

  3. 递归终止条件:在dp函数中,递归的终止条件是pos为0,这意味着已经处理完所有的数位。这个条件是正确的,但可以进一步优化递归的逻辑,减少不必要的递归调用。

  4. 循环优化:在dp函数的内部循环中,可以进一步优化循环的终止条件,避免不必要的迭代。

  5. 输入输出优化:虽然这个程序的输入输出操作已经很简洁,但在处理大量数据时,可以考虑使用更快的输入输出方法,比如使用scanfprintf代替cincout

  6. 代码可读性:代码中的变量命名可以进一步改进,以提高代码的可读性。例如,使用更具描述性的变量名,而不是单字母或缩写。

  7. 错误处理:程序没有包含错误处理逻辑,比如输入数据超出预期范围的情况。在实际应用中,应该添加适当的错误检查和处理。

相关文章:

数位DP——AcWing 1081. 度的数量

数位DP 定义 数位DP是一种动态规划技巧&#xff0c;特别适用于处理与数字的位操作相关的问题&#xff0c;如数字序列的计数、数字的生成等问题。它通过将问题分解为对每一位数字的独立考虑&#xff0c;从而简化问题复杂度&#xff0c;实现高效求解。 数位DP的核心思想是将原…...

2024下半年必追国漫片单,谁将问鼎巅峰?

随着2024年上半年的落幕&#xff0c;国漫市场再度迎来了百花齐放的盛况。从经典续作到全新IP&#xff0c;从玄幻到科幻&#xff0c;每一部作品都以其独特的魅力吸引着观众的目光。本期为大家盘点下半年值得一看的国漫佳作&#xff0c;大胆预测&#xff0c;谁将成为这场神仙打架…...

信息发布小程序h5 uniapp thinkphp

纯手工uniapp thinkphp 全开源打造 信息发布小程序 一、概述 信息发布小程序是一种基于微信平台的小程序应用&#xff0c;旨在为用户提供便捷的信息发布与展示服务。用户可以通过该小程序快速发布各类信息&#xff0c;如招聘、寻物、公告等&#xff0c;同时也可以浏览和搜索…...

Windows定时任务执行脚本

场景&#xff1a;由于网络波动原因导致云数据库没连接上&#xff0c;从而导致某个流程引擎链接不上数据库从而导致该流程引擎服务挂了&#xff0c;网络恢复后 数据库链接正常&#xff0c;但是该引擎服务还是中止状态。 解决方案&#xff1a;在Windows中新建一个定时任务&#…...

优维“统一开放平台”:开放、开发、集成、客制化

基于丰富完善的产品体系&#xff0c;优维重磅推出了统一开放平台。这款由优维自主设计与研发&#xff0c;集数据开发、能力开放、能力集成、客制化为一体的统一开放平台&#xff0c;具备应用市场、应用开发、连接能力、采控平台、API集市、开发者工具等功能模块&#xff0c;可为…...

ChatGPT新纪元:揭秘GPT-4o的多模态能力

GPT-4o登场 探索ChatGPT的多模态创新 今日凌晨&#xff0c;OpenAI向全球宣布了AI发展的新篇章——GPT-4o&#xff0c;每次OpenAI发布重大更新时&#xff0c;尽管令人兴奋&#xff0c;但也不免使众多初创公司的梦想破灭。 GPT-4o的命名中的“o”象征着“omni”——全能的代表。…...

泰勒斯威夫特2022年纽约大学毕业典礼演讲:NYU‘s 2022 Commencement Speaker Taylor Swift

NYU’s 2022 Commencement Speaker Taylor Swift Link: https://www.youtube.com/watch?vOBG50aoUwlI Singer, songwriter, producer, and director Taylor Swift received a Doctor of Fine Arts, honoris causa, at the Commencement for the Class of 2022 and delivered …...

(四)SvelteKit教程:调用外部 API 获取数据

&#xff08;四&#xff09;SvelteKit教程&#xff1a;调用 API 我们先按照如下的方式来构建api服务&#xff1a; step 1:npm i json-serverstep 2:在根目录下新建 db.json 文件&#xff0c;内部写入如下内容&#xff1a;{"users": [{"id": 1,"name…...

数据结构-分析期末选择题考点(排序)

何似清歌倚桃李 一炉沈水醉红灯 契子 ✨ 上一期给大家提供了大概会考的题型给老铁们复习的大致思路 这一期还会是一样&#xff0c;我将整理一下排序的题型以及解题方法给你们 由于时间还很多&#xff0c;我就慢慢总结吧&#xff0c;一天一章的样子&#xff0c;明天总结串、后天…...

Python:探索高效、智能的指纹识别技术(简单易懂)

目录 概括 导入库 函数一 参数&#xff1a; 函数二 函数三 主函数 运行结果 src&#xff1a; model_base 7.bmp ​编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征&#xff0c;实现高准确度的身份识别。…...

『SD』AI绘画,不会写提示词怎么办?

提示词 有没有想过&#xff0c;为什么你用 SD 生成的猫是长这样的。 而其他人可以生成这样的猫。 虽然生成的都是猫&#xff0c;但猫与猫之间还是有差距的。 如果你的提示词只是“cat”&#xff0c;那大概率就会出现本文第一张图的那个效果。而如果你加上一些形容词&#xff…...

搭建大型分布式服务(四十二)SpringBoot 无代码侵入实现多Kafka数据源整合插件发布

系列文章目录 文章目录 系列文章目录前言MultiKafkaStarter [V2.2]一、功能特性二、快速开始&#xff08;生产端&#xff09;三、快速开始&#xff08;消费端&#xff09;四、其它特性五、变更记录六、参考文章 前言 在分布式服务的架构演进中&#xff0c;消息队列作为核心组件…...

Python 学习路线及技巧

一、学习路线 1. 基础阶段 ● 学习 Python 的语法基础&#xff0c;如变量、数据类型、运算符、控制流等。 ● 掌握常用的 Python 标准库&#xff0c;如 os、sys、re、datetime 等。 ● 通过编写简单的程序来巩固基础&#xff0c;如计算器、字符串处理等。 2. 进阶阶段 ● 深入…...

计算机网络知识整理笔记

目录 1.对网络协议的分层&#xff1f; 2.TCP/IP和UDP之间的区别&#xff1f; 3.建立TCP连接的三次握手&#xff1f; 4.断开TCP连接的四次挥手&#xff1f; 5.TCP协议如何保证可靠性传输&#xff1f; 6.什么是TCP的拥塞控制&#xff1f; 7.什么是HTTP协议&#xff1f; 8…...

练习 String翻转 注册处理 字符串统计

p493 将字符串中指定部分进行翻转 package chapter;public class reverse {public static void main(String[] args) {String str "abcdef";str reverseMethod(str,0,3);System.out.println(str);}public static String reverseMethod(String str, int start, in…...

linux的常用系统维护命令

1.ps显示某个时间点的程序运行情况 -a &#xff1a;显示所有用户的进程 -u &#xff1a;显示用户名和启动时间 -x &#xff1a;显示 没有控制终端的进程 -e &#xff1a;显示所有进程&#xff0c;包括没有控制终端的进程 -l &#xff1a;长格式显示 -w &#xff1a;宽…...

java:aocache 0.4.0 缓存控制机制

aoocache发布第一个版本0.1.0时&#xff0c;没有考虑到使用aocache的项目对方法缓存的控制需求。 场景 给同事做培训时&#xff0c;同事提到这个需求&#xff0c;他希望能够有方法主动去清理指定方法的缓存&#xff1a; 他的数据是由其他服务启动时提供的&#xff0c;他的方法…...

试析C#编程语言的特点及功能

行步骤&#xff0c;而不必创建新方法。其声明方法是在实例化委托基础上&#xff0c;加一对花括号以代表执行范围&#xff0c;再加一个分号终止语句。 2.3.3 工作原理 C#编译器在“匿名”委托时会自动把执行代码转换成惟一命名类里的惟一命名函数。再对存储代码块的委托进行设…...

Textual Learning2 -- 使用时的小问题

1、出现的问题&#xff1a; 在vscode里面直接运行函数会显示报错&#xff1a; 我尝试在vscode中含textual库的环境下运行&#xff0c;但仍然报错 2、解决方案&#xff1a; 在命令行中运行&#xff1a; 首先按winR&#xff0c;输入cmd打开命令行 或在已经安装的conda环境&a…...

CST--如何在PCB三维模型中自由创建离散端口

在使用CST电磁仿真软件进行PCB的三维建模时&#xff0c;经常会遇到不能自动创建离散端口的问题&#xff0c;原因有很多&#xff0c;比如&#xff1a;缺少元器件封装、开路端口、多端子模型等等&#xff0c;这个时候&#xff0c;很多人会选择手动进行端口创建&#xff0c;但是&a…...

优化论文质量的实用工具:9款高效查重软件深度测评

核心工具对比速览 工具名称 核心功能 处理时间 适配检测平台 特色优势 aibiye 降AIGC查重 20分钟 知网/格子达/维普 保留学术术语的AI痕迹弱化 aicheck AIGC检测降重 即时 主流学术平台 实时检测反馈精准降重 askpaper 学术AI优化 15-30分钟 高校常用系统 专…...

低代码/无代码的真相:是程序员的“终结者”,还是“超级外挂”?

低代码/无代码的真相&#xff1a;是程序员的“终结者”&#xff0c;还是“超级外挂”&#xff1f;近年来&#xff0c;“低代码&#xff08;Low-Code&#xff09;”和“无代码&#xff08;No-Code&#xff09;”平台如火如荼。从钉钉宜搭、微软 Power Platform 到 Mendix、OutSy…...

三月估值翻四倍,Kimi改写AI叙事?

投资界消息&#xff0c;月之暗面Kimi正以180亿美元投前估值进行10亿美元融资。不到三个月&#xff0c;其估值翻四倍&#xff0c;成中国最快“十角兽”&#xff0c;业务端也迎来爆发。融资速度惊人去年底Kimi完成5亿美元C轮融资&#xff0c;投后估值43亿美元。春节期间超7亿美元…...

导师说“不像能做完的”?百考通AI开题报告,专治目标虚、方法空、进度假

开题报告是毕业论文或学位研究的“第一张施工图”&#xff0c;它不仅要阐明研究价值&#xff0c;更要清晰界定问题、设计方法、规划路径。然而&#xff0c;许多学生在撰写时常常陷入“有想法却写不出”“懂方向但不会表达”的困境&#xff1a;选题宽泛、文献堆砌、方法模糊、结…...

Openclaw 附录C 配置模板与自定义参考

附录C 配置模板与自定义参考&#x1f4a1; 本附录目标&#xff1a;提供 openclaw.json 的常用配置片段&#xff0c;供你在引导向导完成后按需自定义。所有模板均基于官方文档&#xff08;https://docs.openclaw.ai/gateway/configuration-examples&#xff09;验证&#xff0c;…...

30天速成大模型高手!无高学历无大厂背景?这套亲测路径助你月入45万!

本文为想进入AI领域但缺乏背景的普通人提供了一条30天的实战学习路径。文章指出企业更看重项目经验而非学历&#xff0c;并分享了包含Prompt工程、RAG技术、Agent开发、模型微调和部署的完整学习计划。通过每周聚焦核心技能并完成实战项目&#xff0c;学员可快速掌握大模型应用…...

一天一个开源项目(第51篇):system-prompts-and-models-of-ai-tools - AI 工具系统提示词和模型资源集合

引言 “Over 30,000 lines of insights into their structure and functionality.” 这是「一天一个开源项目」系列的第 51 篇文章。今天介绍的项目是 system-prompts-and-models-of-ai-tools&#xff08;GitHub&#xff09;。 想了解 Cursor、Claude Code、Windsurf、Devin A…...

【java】System类详解

Java 基础核心类&#xff1a;System 类详解&#xff08;常见用法 使用场景 面试高频&#xff09;在 Java 开发中&#xff0c;System 类几乎每天都会使用&#xff0c;例如&#xff1a; System.out.println("Hello World");但很多人只知道 println&#xff0c;却忽略…...

直接上结论:10个AI论文网站测评!本科生毕业论文写作必备工具推荐

在当前学术写作日益依赖AI工具的背景下&#xff0c;本科生在毕业论文写作过程中常常面临选题困难、文献检索繁琐、内容逻辑不清、格式规范不熟等多重挑战。为了帮助学生高效完成高质量论文&#xff0c;笔者基于2026年的实测数据与真实用户反馈&#xff0c;对市面上主流的10个AI…...

ERP为跨境电商卖家身打造的全链路解决方案的庖丁解牛

跨境电商卖家面临的核心挑战是**“全球卖、本地化运营、合规化经营、精细化核算”**。单一工具&#xff08;如打单软件、库存表格&#xff09;已无法支撑复杂业务。 全链路 ERP 解决方案的本质&#xff0c;是将选品、采购、刊登、订单、仓储、物流、财务、客服、合规九大环节&a…...