首页 > 其他分享 >数位 dp 入门

数位 dp 入门

时间:2025-01-13 22:05:04浏览次数:3  
标签:return 入门 get int 枚举 num ans dp 数位

如果余生有浪漫的星河,日子慢慢过。《如果我们在余生相遇》

现在发现我们理解一件事情,其实是基于我们的认知去理解的。所以一些以前理解不了的事情,或者说当时难以理解的事情,过一段时间,再去看,可能恍然大悟。

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

using namespace std;

int get(vector<int> num,int l,int r){
    int ans=0;
    for(int i=l;i>=r;i--){
        ans=ans*10+num[i];
    }
    
    return ans;
}

int pow10(int x){
    int ans=1;
    while(x--){
        ans*=10;
    }
    
    return ans;
}

int count(int n,int x){
    vector<int> num;
    while(n){
        num.push_back(n%10);
        n/=10;
    }
    n=num.size();
    
    int ans=0;
    for(int i=n-1-!x;i>=0;i--){
        if(i<n-1){
            ans+=get(num,n-1,i+1)*pow10(i);
            if(!x){
                ans-=pow10(i);
            }
        }
        
        if(x==num[i]){
            ans+=get(num,i-1,0)+1;
        }else if(x<num[i]){
            ans+=pow10(i);
        }
    }
    
    return ans;
}

int main(){
    int a,b;
    while(scanf("%d%d",&a,&b),a){
        if(a>b){
            swap(a,b);
        }
        
        for(int i=0;i<10;i++){
            printf("%d ",count(b,i)-count(a-1,i));
        }
        puts("");
    }
    
    return 0;
}

今天感觉自己的状态不好。这题写半天,理解半天才搞清楚。走神看了一下 b 站视频,凯圣王讲健身的质量是比重要更加重要的。健身房关门了。我好想健身。我们学习也是质量大于数量或者速度。慢才能稳,稳才能快。很多事情其实是很漫长的一个过程。我在操场看到有大体重的人在跑步,我就在想,假设他真的想要减重的话,一定不能跑得太快了,因为心态是最重要的。跑太快了人根本顶不住的。

数位 dp 其实就是有点前缀和的思想在里面。我们要求 ab 的所有数字里面的 0~9 的出现次数,那么我们求出来前缀和,然后用前缀和公式可以计算。这是第一步转换。第二步转换是,我们考虑把上界的数字存到向量里面,其实就是数组。没差。然后我们分情况来考虑。首先是枚举位左边的数字。假设枚举位左边的数字比原来的数字小,那么枚举位右边的数字可以随便选。比如说枚举位右边有三位数字,那么可以有 1000 1000 1000 种情况。然后乘以枚举位左边的可能的情况数目。但是这个时候需要特别考虑 x=0 的情况。因为,不能有前导零。也就是说,假设我们当前枚举的情况是 0 0 0 ,那么前面那位就不可以是零。好吧。其实这个我不是太理解。大概懂这个意思。然后就是其他的情况。其实也比较简单。写的时候注意下标。写 get 函数的时候,注意,l 是大于 r 的,不然很容易写错,还发现不了。

标签:return,入门,get,int,枚举,num,ans,dp,数位
From: https://blog.csdn.net/L3102250566/article/details/145119814

相关文章

  • SQL刷题快速入门(二)
    其他章节:SQL刷题快速入门(一)承接上一章节,本章主要讲SQL的运算符、聚合函数、SQL保留小数的几种方式三个部分运算符SQL支持多种运算符,用于执行各种操作,如算术运算、比较、赋值、逻辑运算等。以下是一些常见的SQL运算符类型及其示例:算术运算符+(加)-(减)*(乘)/(除)%(取模)SELECT......
  • Kali高手都在用的环境变量技巧,学会这些就能实现隐蔽渗透!黑客技术零基础入门到精通教程
    大家好,我们今天继续更新《黑客视角下的KaliLinux的基础与网络管理》中的管理用户环境变量。为了充分利用我们的黑客操作系统KaliLinux,我们需要理解和善于使用环境变量,这样会使我们的工具更具便利,甚至具有一定的隐蔽性。1.环境变量基础概念1.1什么是变量?变量在计算机......
  • 独立站新手必看:2025年,Wix和WordPress哪个好?
     如今跨境电商独立站依旧有新手入局,大部分人都会在主流选项中选择起步平台,比如Wix和Wordpress就是热门选择。但两个平台哪一个更适合自己?本篇对比可能对你有帮助!一、电商应用Wix和Wordpress并非完完全全仅服务于电商独立站,它们都有博客相关的功能(比如内容的发布、分类、添......
  • 独立站新手必看:2025年,Wix和WordPress哪个好?
     如今跨境电商独立站依旧有新手入局,大部分人都会在主流选项中选择起步平台,比如Wix和Wordpress就是热门选择。但两个平台哪一个更适合自己?本篇对比可能对你有帮助!一、电商应用Wix和Wordpress并非完完全全仅服务于电商独立站,它们都有博客相关的功能(比如内容的发布、分类、添......
  • 基于DPDK的用户态协议栈(2)基于DPDK实现UDP的数据接收
    注:本文只实现了数据接收部分一、使用DPDK实现UDP的数据接收流程1.1初始化EALmain(intargc,char*argv[]){//main函数的标准参数,用于接收命令行参数。argc表示参数的数量,argv是一个指向字符串数组的指针,这些字符串是传递给程序的命令行参数。//初始化EAL。if(......
  • 1130: 【入门】简单a+b(字符串式子a+b)
    看到了吗,不是正常的输入a和b,然后直接相加,而是一个式子,没关系,一个字符串对于电脑而言奥秘多多,给电脑一个式子,他会反应吗?是不是不会。诶,但是让他去提取,那就是“怎么看都看不够”,嘿嘿,开个玩笑,就是提取字符串里的信息可以解决不少问题,这题就是这样。下面是代码:#include<bits/stdc......
  • Apache Hop从入门到精通 第三课 Apache Hop下载&安装
    1、下载官方下载地址:https://hop.apache.org/download/,本教程是基于apache-hop-client-2.11.0.zip进行解压,需要jdk17,小伙伴们可以根据自己的需求下载相应的版本。如下图所示2、下载jdk17(https://www.microsoft.com/openjdk)本次下载jdk包为microsoft-jdk-17.0.13-macos-x64.......
  • STM32 HAL库函数入门指南:从原理到实践
    1STM32HAL库概述STM32HAL(HardwareAbstractionLayer)库是ST公司专门为STM32系列微控制器开发的一套硬件抽象层函数库。它的核心设计理念是在应用层与硬件层之间建立一个抽象层,这个抽象层屏蔽了底层硬件的具体实现细节,为开发者提供了一套统一的、标准化的应用程序接口(API)......
  • 【网络安全渗透测试零基础入门】一文带你0基础挖到逻辑漏洞(非常详细),轻松成为朋友眼中
    前言这是七海给粉丝盆友们整理的网络安全渗透测试入门阶段逻辑漏洞渗透与防御教程本文主要讲解如何从零基础带你挖到逻辑漏洞喜欢的朋友们,记得给我点赞支持和收藏一下,关注我,学习黑客技术。逻辑漏洞概述由于程序逻辑不严谨或逻辑太过复杂,导致一些逻辑分支不能正常处理或......
  • 万字详解内网渗透该怎么学!黑客技术零基础入门到精通实战教程建议收藏!
    前言:本文主要记录了作者之前在内网渗透的一个全方面的学习过程,包括如何从外网找到入口点,之后如何提权,然后如何在内网中进行一个信息收集,当存在域的情况下又是怎么收集信息,然后通过代理来进一步横向,不论是一层代理还是两层,本文都有涉及,以及一些常见的代理工具的使用方法、权......