首页 > TAG信息列表 > P2602

洛谷P2602 [ZJOI2010] 数字计数 (数位DP)

白嫖的一道省选题...... 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 typedef long long LL; 6 int dig[15],pos; 7 LL dp[15][10][15],ans[2][10]; 8 9 LL dfs(int pos,int val,int cnt,bool lead,bool li

【P2602 [ZJOI2010]数字计数】题解

题目链接 题目 原题来自:ZJOI 2010 给定两个正整数 \(a\) 和 \(b\),求在 [\(a,b\)] 中的所有整数中,每个数码 (\(digit\)) 各出现了多少次。 思路 首先在数位dp中,对于当前枚举的数,乘上后面的方案数。 那么后面的数如何多次计算呢? 我们发现这些数具有传递性,于是我们每次可以把后面的数

P2602 [ZJOI2010]数字计数

原题链接 考察:数位dp 思路:   预处理f[i][j][k]表示前i位数,最高位是j,k出现的次数.  f[i][j][k] = \(\sum_{t=0}^9\) f[i-1][t][k]; (j!=k)  f[i][j][k] = 10i-1+\(\sum_{t=0}^9\) f[i-1][t][k]; (j!=k,i-1位一共10i-1个数)   接下来按模板写即可,但是注意当数位上的数

洛谷 P2602 [ZJOI2010]数字计数

比较普通的数位DP,有个要注意的地方就是状态应该要是2维的 dp[i][j]表示前i位个数为j的数量,这样的话,后续加上去一位数字之后才能统计到之前本来就有的。 另外开两维,一维是表示统计的数字,还有一维标记前导零。 下附代码: 1 #include<bits/stdc++.h> 2 #define ll long long 3 us

[P2602] [ZJOI2010]数字计数(数位dp)

原题 题目描述 给定两个正整数 \(a\) 和 \(b\),求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次。 输入格式 仅包含一行两个整数 \(a,b\),含义如上所述。 输出格式 包含一行十个整数,分别表示 \(0∼9\)在 \([a,b]\)中出现了多少次。 输入输出样例 输入 #1 1 99 输出 #1

P2602 [ZJOI2010]数字计数

------------恢复内容开始------------ 蒟蒻不会数位dp也不会dfs怎么办呢? 利用类似于倍增的思想…… 输入a b两数,我们把\([a,b]\)划分为三段分别计算 以下用 \(lena,lenb\) 代指 \(a,b\) 的位数 首先,我们要统计 \(a\) 到 最大的 \(lena\) 位数的答案 (通俗:a 到 lena个9的数) 第二

洛谷 P2602(数位DP)

### 洛谷 P2602 题目链接 ###   题目大意:给你一个区间,问你区间所有数字中,0、1、2 .... 9 的个数的总和分别为多少。   分析: 枚举 0 ~ 9 进行数位 DP 即可。 注意记忆化搜索:必须要用到第二维来表示,前 1 ~ pos 位,某个数(0 ~ 9)的个数。 例如,我们在求这个区间中 2 的个数,直接看的话,后

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

很久以前就。。。但是一直咕咕咕   思路:数位$DP$ 提交:1次 题解:见代码 #include<cstdio>#include<iostream>#include<cstring>#define ll long long#define R register llusing namespace std;ll f[15][15],a,b;//f[l][sum]对应dfs中(因为只在!ul&&!ck的时候记忆化)int num[15];l

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

P2602 [ZJOI2010]数字计数 思路: 首先考虑含有前导0的情况,可以发现在相同的\(i\)位数中,每个数的出现次数都是相等的。所以我们可以设\(f(i)\)为\(i\)位数每个数的出现次数。 那么就有递推方程:\(f(i)=f(i-1)*10+10^{i-1}\)。 假设现在要求的数为\(x\)位,那么我们依次从\(x\)位往下面求

【题解】P2602 [ZJOI2010]数字计数

$Description: $ 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。 \(Sample\) \(Input:\) 1 99 \(Sample\) \(Output:\) 9 20 20 20 20 20 20 20 20 20 \(Solution:\) 状态 \(f[i][j]\) 表示前 \(i\) 位当前这个数出现了 \(j\) 次 。 那么就可以

【题解】P2602[JZOI2010]数字计数

【题解】[P2602ZJOI2010]数字计数 乍看此题,感觉直接从数字的位上面动手,感觉应该很容易。 但是仔细看数据范围,发现如果不利用计数原理,肯定会超时,考虑数码出现的特征: \(A000\)到\(A999\),四位数中的\(A\)总共出现了\(999-0+1\)次。假设\(A\)在第\(k\)位上,那么它出现了\(10^{k-1}\)次