虽然说是数位 dp 入门题但是还是不是很会(悲

看了题解才做出来,中途因为各种 SB 问题调了很长时间(悲


聪明的你一定能看出来这是数位 dp,因此令 \(i\) 为当前填的位数,\(limit\) 记录前 \(i - 1\) 位是否与边界相同,\(lead\) 记录前导零。

然后就是伟大的添维了,我们显然要记录目前统计的是哪个数字,然后我们还要记录这个数字出现的次数 \(sum\)。

这个时候 SX 这个天才会问了诶为什么要记录 \(sum\) 啊 \(sum\) 不就是答案吗这不就是脱了屁股放裤子吗?

其实这个我也没研究出个所以然来(悲),我只能说一点我自己浅显的理解,希望有巨佬能指出来我的错误,我的 QQ 是 2392303708 欢迎来喷并且指正 qwq。

首先我们当 \(i = 0\) 时肯定要返回的,返回什么值呢?返回 \(sum\)。我们是以记忆化搜索为框架,每个状态为一个节点会做出一棵树,以下面这张图为例,酱紫:

(反正是给自己看的图丑一点没关系)被红色标记过的链的末端的叶子节点的 \(sum\) 就是这条链上除了最后一个叶子节点要求数码出现次数(其实叶子节点没有数码的说,但是毕竟图都这么画了。。)。请注意我们返回 \(i = 0\) 的情况其实就是给 \(i = 1\) 的情况的,\(i = 1\) 的情况出现的数码次数显然是链上总和。

也就是说其实我们返回 \(i = 0\) 的情况就是给 \(i = 1\) 的状态做准备的┓( \´∀` )┏

因此我们要记录 \(sum\),这样我们才能返回。

至于它要不要记录到状态里面捏。。。反正我开数组记录了,记了肯定没问题如果有不记录的方法 QQ 撅我(喜

//SIXIANG
#include <iostream>
#include <cstring>
#define MAXN 100000
#define int long long
#define QWQ cout << "QWQ" << endl;
using namespace std;
int f[20][114514][2][2], arr[20], tot = 0;
int digit(int i, int sum, int limit, int lead, int num) {
if(!i) return sum;
if(f[i][sum][limit][lead] != -1) return f[i][sum][limit][lead];
int lim = ((limit) ? (arr[i]) : 9), rest = 0;
for(int p = 0; p <= lim; p++)
rest += digit(i - 1, sum + ((p || (!lead)) && (p == num)), (limit && (p == arr[i])), (lead && (!p)), num);
f[i][sum][limit][lead] = rest;
return rest;
}
int solve(int x, int num) {
memset(f, -1, sizeof(f));
memset(arr, 0, sizeof(arr));
tot = 0;
int tmp = x;
do {
arr[++tot] = x % 10;
x /= 10;
} while(x);
return digit(tot, 0, 1, 1, num);
}
signed main() {
int l, r; cin >> l >> r;
for(int p = 0; p <= 9; p++) {
cout << solve(r, p) - solve(l - 1, p) << ' ';
}
}

题解 P2602 [ZJOI2010] 数字计数的更多相关文章

  1. 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP

    题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ...

  2. P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业

    P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i&l ...

  3. P2602 [ZJOI2010]数字计数(递推)

    P2602 [ZJOI2010]数字计数 思路: 首先考虑含有前导0的情况,可以发现在相同的\(i\)位数中,每个数的出现次数都是相等的.所以我们可以设\(f(i)\)为\(i\)位数每个数的出现次数 ...

  4. 数位dp详解&&LG P2602 [ZJOI2010]数字计数

    数位dp,适用于解决一类求x~y之间有多少个符合要求的数或者其他. 例题 题目描述 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除 ...

  5. 洛谷P2602 [ZJOI2010]数字计数(数位dp)

    数字计数 题目传送门 解题思路 用\(dp[i][j][k]\)来表示长度为\(i\)且以\(j\)为开头的数里\(k\)出现的次数. 则转移方程式为:\(dp[i][j][k] += \sum_{t ...

  6. 洛谷P2602 [ZJOI2010]数字计数 题解

    题目描述 输入格式 输出格式 输入输出样例 输入样例 1 99 输出样例 9 20 20 20 20 20 20 20 20 20 说明/提示 数据规模与约定 分析 很裸的一道数位DP的板子 定义f[ ...

  7. [洛谷P2602][ZJOI2010]数字计数

    题目大意:求区间$[l,r]$中数字$0\sim9$出现个数 题解:数位$DP$ 卡点:无 C++ Code: #include <cstdio> #include <iostrea ...

  8. Luogu P2602 [ZJOI2010]数字计数 数位DP

    很久以前就...但是一直咕咕咕 思路:数位$DP$ 提交:1次 题解:见代码 #include<cstdio> #include<iostream> #include<c ...

  9. P2602 [ZJOI2010]数字计数

    https://www.luogu.org/problemnew/show/P2602 数位dp #include <bits/stdc++.h> using namespace std; ...

  10. Luogu P2602 [ZJOI2010]数字计数

    这算是一道数位DP的入门题了吧虽然对于我来说还是有点烦 经典起手式不讲了吧,\(ans(a,b)\to ans(1,b)-ans(1,a-1)\) 我们首先预处理一个东西,用\(f_i\)表示有\(i ...

随机推荐

  1. java 常用的jar包下载地址

    Eclipse: http://www.eclipse.org/downloads/packages/all Spring: http://Framework: http://repo.spring. ...

  2. Python爬虫爬取彼岸网4K Picture

    深夜爬取4k图片 下载流程 定义page_text函数,对第一页地址发送get请求,因为页面数据在页面源代码都能查到,所以发送get 请求就ok!,注意:要进行编码格式设置,可以去源代码查看, 定义p ...

  3. 【Java SE】Day10接口、多态

    一.接口 1.概述 是一种引用类型,是方法的集合,内部封装了各种方法 引用类型:数组.类.接口.包装类 2.方法的定义格式 抽象方法:无方法体,子类实现 默认方法: 静态方法:static修饰,可以由 ...

  4. 【JVM调优】Day04:总结前三日内容(GC+算法*4+简单回收器*3三色标记,CMS+G1+ZGC,参数个数+OOM+调优参数)

  5. Vue 打包报错UnhandledPromiseRejectionWarning: postcss-svgo: Error in parsing SVG

    解决方案 检查下自己最新写的css 或者最新引入的样式库,把里面的base64的url替换成双引号形式的 PS:我这报错是因为引入的weui.min.css里面的loading样式的`backgrou ...

  6. Java单例模式的最佳实践?

    "读过书,--我便考你一考.茴香豆的茴字,怎样写的?"--鲁迅<孔乙己> 0x00 大纲 目录 0x00 大纲 0x01 前言 0x02 单例的正确性 new关键字 c ...

  7. ORM数据库查询优化only与defer(select_related与prefetch_related)

    目录 一:数据库查询优化 1.ORM语句特点 2.only 3.defer 4.only与defer区别 5.select_related与prefetch_related 6.select_rela ...

  8. java反射基础知识整理

    目录 1.反射机制的作用 2.获取一个类的实例 3.使用Class.forName()方法加载类的静态代码块 4.获取配置文件的路径 5.java反编译 5.1.获取类中的成员变量 5.2.通过类名反 ...

  9. JUC并发编程详解(通俗易懂)

    一.JUC简介 在Java5.0提供了java.util.concurrent包,简称JUC,即Java并发编程工具包.JUC更好的支持高并发任务. 具体的有以下三个包: java.util.conc ...

  10. (12)go-micro微服务JWT跨域认证

    目录 一 JWT介绍 二 JWT优缺点 三 JWT使用 1. 导包和数据定义 2.生成JWT 3.解析JWT 4.完整代码 四 最后 一 JWT介绍 JWT 英文名是 Json Web Token , ...