AcWIng1085. 不要62(数位DP)

news2024/11/24 6:50:39

文章目录

  • 一、问题
  • 二、分析
  • 三、代码

一、问题

在这里插入图片描述

二、分析

这道题涉及的算法是数位DP。如果大家不懂数位DP的话,可以先去看作者之前的文章:第五十章 动态规划——数位DP模型

假设一个数 n n n,我们先求出从 1 1 1 n n n当中,所有不含数字4和62的数字的个数。我们将这个过程封装为一个函数,先来分析一下这个函数怎么写。

按照数位DP的分析逻辑,先将 n n n的每一位存储在 v e c t o r vector vector中,然后从高位开始枚举。

对于其中的任意一位 a a a。由于我们求的是从 1 1 1 n n n的数字,所以在该位之前所有高位都相同的条件下,该位所填的数字必须是 ≤ a \leq a a的,这样做才能小于等于 n n n

我们现在分成两类,一类是该位 < a <a <a
在这种情况下,我们就无需考虑数字大小的问题了,因为该位小于 a a a,所以比该位小的位可以随便写,无论怎么写都是小于 a a a的。那么我们又怎么统计该情况下,符合题目要求的数字个数呢?

求个数的过程就是我们真正需要写DP的部分。这里我们先直接利用DP的状态定义解决这个函数,具体的状态转移我们后面再说。
我们让状态: f [ i ] [ k ] f[i][k] f[i][k]表示数字有 i i i位,并且第 i i i位是 k k k的情况下, 数字中不含 4 4 4 62 62 62的数字个数。那么我们这里直接将 k k k 0 0 0 a − 1 a-1 a1进行枚举 f [ i ] [ k ] f[i][k] f[i][k],然后将这些累加到结果上。但并不是所有都能累加的,比如 k = 4 k=4 k=4的时候,就不可以。再比如上一位的数字和当前位的 k k k组成 62 62 62的时候,也是不能算的。(这就说明我们还需要一个 l a s t last last变量去存储上一位的数字。)

当这一位是 a a a的时候,我们只需要接着往后讨论,但是如果第 a a a位是 4 4 4的话,说明无论后面是什么,组成的数字都是不符合题目要求的,直接挑出循环即可。

接下来,我们分析一下状态转移应该怎么写?

A f [ i ] [ k ] + = f [ i − 1 ] [ j ] Af[i][k]+=f[i-1][j] Af[i][k]+=f[i1][j]
上面的 j j j是从 0 0 0 9 9 9的。但是要注意的是, j j j k k k不能是 4 4 4,并且 j j j k k k不能组成 62 62 62

三、代码

#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

const int N = 35;

int f[N][10];

void init()
{
    for (int i = 0; i <= 9; i ++ )
        if (i != 4)
            f[1][i] = 1;

    for (int i = 1; i < N; i ++ )
        for (int j = 0; j <= 9; j ++ )
        {
            if (j == 4) continue;
            for (int k = 0; k <= 9; k ++ )
            {
                if (k == 4 || j == 6 && k == 2) continue;
                f[i][j] += f[i - 1][k];
            }
        }
}
int dp(int n)
{
    if (!n) return 1;

    vector<int> nums;
    while (n) nums.push_back(n % 10), n /= 10;

    int res = 0;
    int last = 0;
    for (int i = nums.size() - 1; i >= 0; i -- )
    {
        int x = nums[i];
        for (int j = 0; j < x; j ++ )
        {
            if (j == 4 || last == 6 && j == 2) continue;
            res += f[i + 1][j];
        }

        if (x == 4 || last == 6 && x == 2) break;
        last = x;

        if (!i) res ++ ;
    }

    return res;
}
int main()
{
    init();

    int l, r;
    while (cin >> l >> r, l || r)
    {
        cout << dp(r) - dp(l - 1) << endl;
    }

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《花雕学AI》如何用ChatGPT提升工作效率:适合不同场合的实用技巧大全

实用技巧分类目录 一、最佳ChatGPT 4提示 二、最佳写作和内容创作ChatGPT提示 三、最佳趣味性ChatGPT提示 四、最佳网络开发的ChatGPT提示 五、最佳音乐主题ChatGPT提示 六、最佳职业主题ChatGPT提示 七、最佳用于教育的ChatGPT提示 八、最佳用于市场营销的ChatGPT提示 九、最…

MEET开发者 | 选择和努力一样重要,专访杭州三汇测试工程师齐雪莲

「MEET开发者」栏目的第二期嘉宾是来自杭州三汇的测试工程师——齐雪莲。她是从小在新疆长大的甘肃人&#xff0c;10岁的时候回到了甘肃&#xff0c;大学又考回了新疆&#xff0c;在塔里木大学就读计算机科学与技术专业。 毕业后齐雪莲入职了三汇新疆办事处任测试一职&#xff…

电脑没有网络连接怎么办 电脑无法连接网络怎么解决

这个问题至少困扰我一周 目录 电脑没有网络连接怎么办? 方法一 方法二 方法三 方法四 方法五 方法六 电脑没有网络连接怎么办? 其中也包括了改IP。。电脑就是不好使 #include <iostream> using namespace std; int main(){system("netsh interface ip s…

日志收集系统:将应用产生的数据通过flume收集后发送到Kafka,整理后保存至hbase

目录 前言&#xff1a;功能描述 第一步&#xff1a;flume拉取日志数据&#xff0c;并将源数据保存至Kafka flume配置文件&#xff1a; users&#xff1a; user_friends_raw&#xff1a; events&#xff1a; train&#xff1a; 第二步&#xff1a;Kafka源数据处理 方式一…

滚珠螺杆在设备上的应用

滚珠螺杆跟直线导轨一样&#xff0c;是很多机械设备上不可或缺的重要部件&#xff0c;它是确保机器能够具备高加工精度的前提条件&#xff0c;因此本身对于精度的要求也相当地高。今天&#xff0c;我们就来了解一下滚珠螺杆在不同设备上的应用吧&#xff01; 1、大型的加工中心…

磁盘U盘变本地磁盘寻回教程

磁盘损坏怎么恢复&#xff1f;磁盘是我们工作、学习和生活中常用的信息存储工具&#xff0c;因为容量大、价格便宜而深受人们的喜爱&#xff0c;因此磁盘也成为了我们一些重要信息的信息载具。磁盘U盘变本地磁盘寻回教程这时我们该如何恢复我们丢失的数据呢&#xff1f;这个时候…

ubuntu 安装 notepad++,显示中文菜单,并解决中文乱码问题

1.安装notepad sudo snap install notepad-plus-plus sudo snap install wine-platform-runtime2. notepad中文乱码问题 安装完成之后&#xff0c;输入中文会显示“口口…”&#xff0c;实际上并不是缺少什么windows字库&#xff0c;而是刚安装好的notepad默认字体是Courier …

4月VR大数据:PICO平台应用近400款,领跑国内VR生态

Hello大家好&#xff0c;每月一期的VR内容/硬件大数据统计又和大家见面了。 想了解VR软硬件行情么&#xff1f;关注这里就对了。我们会统计Steam平台的用户及内容等数据&#xff0c;每月初准时为你推送&#xff0c;不要错过喔&#xff01; 本数据报告包含&#xff1a;Steam VR硬…

软件测试面试题最牛汇总,不会有人没有这份文档吧

常见的面试题汇总 1、你做了几年的测试、自动化测试&#xff0c;说一下 selenium 的原理是什么&#xff1f; 我做了五年的测试&#xff0c;1年的自动化测试&#xff1b; selenium 它是用 http 协议来连接 webdriver &#xff0c;客户端可以使用 Java 或者 Python 各种编程语言…

一个.Net版本的ChatGPT SDK

ChatGPT大火&#xff0c;用它来写代码、写表白书、写文章、写对联、写报告、写周边… 啥都会&#xff01; 个人、小公司没有能力开发大模型&#xff0c;但基于开放平台&#xff0c;根据特定的场景开发应用&#xff0c;却是非常火热的。 为了避免重复造轮子&#xff0c;今天给…

你真的会跟 ChatGPT 聊天吗?(上)

前言&#xff1a;即使你对文中提及的技术不大了解&#xff0c;你也可以毫无压力地看完这篇描述如何更好地获得 ChatGPT 生成内容的文章。因为我也是利用 Azure OpenAI 等认知服务来学习&#xff0c;然后就这样写出来的。所以&#xff0c;舒服地坐下来&#xff0c;慢慢看吧&…

网络计算模式复习(三)

云计算和网格技术的差别 相对于网格计算&#xff0c;在表现形式上&#xff0c;云计算拥有明显的特点&#xff1a; 低成本&#xff0c;这是最突出的特点虚拟机的支持&#xff0c;得在网络环境下的一些原来比较难做的事情现在比较容易处理镜像部署的执行&#xff0c;这样就能够…

【微服务 | 学成在线】项目易错重难点分析(媒资管理模块篇·下)

文章目录 视频处理视频编码和文件格式文件格式和视频编码方式区别ProcessBuilder分布式任务调度XXL-JOBXXL-JOB配置XXL-JOB使用分片广播技术方案视频处理方案及实现思路分布式锁 视频处理 视频编码和文件格式 什么是视频编码&#xff1f; 同时我们还要知道我们为什么要对视频…

家用洗地机哪款好?2023入门级智能洗地机

现代社会对卫生日益重视&#xff0c;尤其是在工业、商业和公共场所要求越来越高。传统清洁方式不能满足人们的需求&#xff0c;清洁工作效率低且卫生难以保证。而洗地机的出现&#xff0c;正是为了解决这些问题。它能够深入清洁地面&#xff0c;有效防止不必要的污垢、细菌和病…

小满nestjs(第二十八章 nestjs 事务)

事务的四大特性 事务具有4个基本特征&#xff0c;分别是&#xff1a;原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;、持久性&#xff08;Duration&#xff09;&#xff0c;简称ACID ① 原子…

2023年5月产品经理认证NPDP线上班火热招生中

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

23年5月高项备考学习笔记 —— 信息系统治理

治理是管理的控制 IT治理&#xff1a;关注风险 治理的驱动因素&#xff1a; 信息孤岛 资源整合目的空泛&#xff0c;缺少规划 目标价值&#xff1a; 与业务目标一致 有效利用信息资源 风险管理 管理层次&#xff1a; 最高管理层&#xff1a;董事会、证实***、战略 执行管理…

数值分析-埃特金算法

目录 一、前言 二、什么是埃特金算法 三、埃特金算法的原理 四、埃特金算法的步骤 1.确定插值点和半方差函数模型 2.计算插值点与已知点之间的距离和半方差函数值 3.确定权重 4.进行插值计算 5.评估插值结果 五、埃特金算法的优缺点 一、前言 数值分析是数学中的一个…

CUDA Stream, Event 与 NVVP

文章目录 一、CUDA StreamAPI实战CUDA Stream和 Serial执行的对比&#xff1a;PCIE和NVLINKCUDA Stream 多流的收益和上限CUDA Kernel合并CUDA7中的Per-Thread编译选项 二、Event三、NVVP四、知识点四 一、CUDA Stream CUDA Stream是GPU上task的执行队列&#xff0c;所有CUDA操…

Mysql表索引(总结篇)

目录 前言 ✨✨✨大家好&#xff0c;我是会飞的鱼-blog&#xff0c;今天我来给大家介绍一下Mysql&#xff0c;有不足之处&#xff0c;请大家多多指教。感谢大家支持&#xff01;&#xff01;&#xff01; 一、索引的概述 1.索引类型 2.索引存储 3.索引优缺点 4.使用建议…