题解 P2602 [ZJOI2010] 数字计数
虽然说是数位 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] 数字计数的更多相关文章
- 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP
题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ...
- P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业
P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i&l ...
- P2602 [ZJOI2010]数字计数(递推)
P2602 [ZJOI2010]数字计数 思路: 首先考虑含有前导0的情况,可以发现在相同的\(i\)位数中,每个数的出现次数都是相等的.所以我们可以设\(f(i)\)为\(i\)位数每个数的出现次数 ...
- 数位dp详解&&LG P2602 [ZJOI2010]数字计数
数位dp,适用于解决一类求x~y之间有多少个符合要求的数或者其他. 例题 题目描述 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除 ...
- 洛谷P2602 [ZJOI2010]数字计数(数位dp)
数字计数 题目传送门 解题思路 用\(dp[i][j][k]\)来表示长度为\(i\)且以\(j\)为开头的数里\(k\)出现的次数. 则转移方程式为:\(dp[i][j][k] += \sum_{t ...
- 洛谷P2602 [ZJOI2010]数字计数 题解
题目描述 输入格式 输出格式 输入输出样例 输入样例 1 99 输出样例 9 20 20 20 20 20 20 20 20 20 说明/提示 数据规模与约定 分析 很裸的一道数位DP的板子 定义f[ ...
- [洛谷P2602][ZJOI2010]数字计数
题目大意:求区间$[l,r]$中数字$0\sim9$出现个数 题解:数位$DP$ 卡点:无 C++ Code: #include <cstdio> #include <iostrea ...
- Luogu P2602 [ZJOI2010]数字计数 数位DP
很久以前就...但是一直咕咕咕 思路:数位$DP$ 提交:1次 题解:见代码 #include<cstdio> #include<iostream> #include<c ...
- P2602 [ZJOI2010]数字计数
https://www.luogu.org/problemnew/show/P2602 数位dp #include <bits/stdc++.h> using namespace std; ...
- Luogu P2602 [ZJOI2010]数字计数
这算是一道数位DP的入门题了吧虽然对于我来说还是有点烦 经典起手式不讲了吧,\(ans(a,b)\to ans(1,b)-ans(1,a-1)\) 我们首先预处理一个东西,用\(f_i\)表示有\(i ...
随机推荐
- java 常用的jar包下载地址
Eclipse: http://www.eclipse.org/downloads/packages/all Spring: http://Framework: http://repo.spring. ...
- Python爬虫爬取彼岸网4K Picture
深夜爬取4k图片 下载流程 定义page_text函数,对第一页地址发送get请求,因为页面数据在页面源代码都能查到,所以发送get 请求就ok!,注意:要进行编码格式设置,可以去源代码查看, 定义p ...
- 【Java SE】Day10接口、多态
一.接口 1.概述 是一种引用类型,是方法的集合,内部封装了各种方法 引用类型:数组.类.接口.包装类 2.方法的定义格式 抽象方法:无方法体,子类实现 默认方法: 静态方法:static修饰,可以由 ...
- 【JVM调优】Day04:总结前三日内容(GC+算法*4+简单回收器*3三色标记,CMS+G1+ZGC,参数个数+OOM+调优参数)
- Vue 打包报错UnhandledPromiseRejectionWarning: postcss-svgo: Error in parsing SVG
解决方案 检查下自己最新写的css 或者最新引入的样式库,把里面的base64的url替换成双引号形式的 PS:我这报错是因为引入的weui.min.css里面的loading样式的`backgrou ...
- Java单例模式的最佳实践?
"读过书,--我便考你一考.茴香豆的茴字,怎样写的?"--鲁迅<孔乙己> 0x00 大纲 目录 0x00 大纲 0x01 前言 0x02 单例的正确性 new关键字 c ...
- ORM数据库查询优化only与defer(select_related与prefetch_related)
目录 一:数据库查询优化 1.ORM语句特点 2.only 3.defer 4.only与defer区别 5.select_related与prefetch_related 6.select_rela ...
- java反射基础知识整理
目录 1.反射机制的作用 2.获取一个类的实例 3.使用Class.forName()方法加载类的静态代码块 4.获取配置文件的路径 5.java反编译 5.1.获取类中的成员变量 5.2.通过类名反 ...
- JUC并发编程详解(通俗易懂)
一.JUC简介 在Java5.0提供了java.util.concurrent包,简称JUC,即Java并发编程工具包.JUC更好的支持高并发任务. 具体的有以下三个包: java.util.conc ...
- (12)go-micro微服务JWT跨域认证
目录 一 JWT介绍 二 JWT优缺点 三 JWT使用 1. 导包和数据定义 2.生成JWT 3.解析JWT 4.完整代码 四 最后 一 JWT介绍 JWT 英文名是 Json Web Token , ...