热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用数位动态规划算法生成包含数字49的数

目录题目来源题目描述输入描述输出描述用例题目解析算法源码题目来源20200817-数位DP-带49的数_哔哩哔哩_bilibili题目描述求区间[1,n]范围内包

目录

题目来源

题目描述

输入描述

输出描述

用例

题目解析

算法源码




题目来源

20200817-数位DP-带49的数_哔哩哔哩_bilibili


题目描述

求区间 [1,n] 范围内包含多少带 49 的数。

一个数是带 49 的数,当且仅当它的十进制表示中存在连续的两位,其中较高位为 4,较低位为 9。

比如:49, 149, 1234987 都是带 49 的数;

而 4, 12345, 94, 999444 都不是。


输入描述

输入一个整数 n (1 ≤ n <2^63)。


输出描述

输出一个整数,表示区间 [1, n] 范围内存在多少带 49 的数。


用例


输入500
输出15
说明


题目解析

本题由于数量级太大,1 ≤ n <2^63,因此不能用暴力枚举,只能用数位DP解决。

本题解题思路和数位DP - 带3的数_伏城之外的博客-CSDN博客

类似,只是数位特征从3变为了49。

也就是说,我们需要关注两级,前一级取值4,后一级取值9,才能满足条件。因此记忆化数组f不仅需要记住某级i下含49数的个数,还需要记住前一级取值是什么,即f需要初始化为二维数组。

f[i][pre],i表示当前级,pre表示上一级的取值。


算法源码

/* Javascript Node ACM模式 控制台输入获取 */
const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});rl.on("line", (line) => {console.log(digitSearch(line));
});function digitSearch(num) {const arr = num.split("").map(Number);// f[i][pre] 表示 第i位,且第i-1位值为pre 的 数中, 不含49的数的个数const f = new Array(arr.length).fill(0).map(() => new Array(10));return num - 0 + 1 - dfs(0, true, f, arr, 0);
}function dfs(p, limit, f, arr, pre) {if (p === arr.length) return 1;if (!limit && f[p][pre]) return f[p][pre];const max = limit ? arr[p] : 9;let count = 0;for (let i = 0; i <= max; i++) {if (i === 9 && pre === 4) continue;count += dfs(p + 1, limit && i === max, f, arr, i);}if (!limit) f[p][pre] = count;return count;
}

推荐阅读
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 本文介绍如何在Node.js环境中执行Powershell脚本,并详细说明了通过子进程处理命令输出和错误信息的具体步骤。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • Composer Registry Manager:PHP的源切换管理工具
    本文介绍了一个用于Composer的源切换管理工具——Composer Registry Manager。该项目旨在简化Composer包源的管理和切换,避免与常见的CRM系统混淆,并提供了详细的安装和使用指南。 ... [详细]
  • Struts2 深度解析:第八章 输入验证与内建验证机制
    本章将深入探讨 Struts2 中的输入验证机制,重点介绍基于 XWork 验证框架的内建验证程序,如 required、requiredstring 和 stringlength。这些工具简化了开发者的工作,使得验证逻辑更加高效和易于管理。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
author-avatar
Cher麻花
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有