### 洛谷 P2602 题目链接 ###

题目大意:给你一个区间,问你区间所有数字中,0、1、2 .... 9 的个数的总和分别为多少。

分析:

枚举 0 ~ 9 进行数位 DP 即可。

注意记忆化搜索:必须要用到第二维来表示,前 1 ~ pos 位,某个数(0 ~ 9)的个数。

例如,我们在求这个区间中 2 的个数,直接看的话,后 pos 位 的 2 的个数好像与 1 ~ pos位 上有多少个 2 并无联系(在 !limit 情况下),那为什么还要开第二维呢?

实际算上来你会发现:比如当枚举到 222 这个数时,很显然 pos==0 后,2 的总个数(即 sum)为 3 。而如果我们枚举到 第 2 位 (十位上)时,用到的记忆化是 dp[2] ,它只记录的是后两位中,有 22 这个数,即两个 2 ,而实际我们求 222 时,应该使程序返回的是 sum== 3 。故我们需要记忆化 dp[2][1] ,让在前 1 ~ pos 位已有一个 2 的时候,返回 sum== 3 (即这个 1 最后会再加上后面两个 2 的个数 ,对应的是 22 )

  

代码如下:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long ll;
ll n,m;
int a[];
ll dp[][];
ll dfs(int pos,int t,int sum,bool lead,bool limit){
if(pos==) return sum;
if(!limit&&!lead&&dp[pos][sum]!=-) return dp[pos][sum];
int up=limit?a[pos]:;
ll res=;
for(int i=;i<=up;i++){
if(lead&&i==) res+=dfs(pos-,t,sum,true,limit&&i==a[pos]);
else res+=dfs(pos-,t,i==t?sum+:sum,false,limit&&i==a[pos]);
}
if(!limit&&!lead) dp[pos][sum]=res;
return res;
}
ll solve(ll x,int t)
{
int pos=;
while(x){
a[++pos]=x%;
x/=;
}
return dfs(pos,t,,true,true);
}
int main()
{
//freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
memset(dp,-,sizeof(dp));
scanf("%lld%lld",&n,&m);
for(int i=;i<=;i++){
if(i!=) printf("%lld ",solve(m,i)-solve(n-,i) );
else printf("%lld\n",solve(m,i)-solve(n-,i) );
}
}

洛谷 P2602(数位DP)的更多相关文章

  1. 洛谷 - P2602 - 数字计数 - 数位dp

    https://www.luogu.org/problemnew/show/P2602 第二道数位dp,因为“数位dp都是模板题”(误),所以是从第一道的基础上面改的. 核心思想就是分类讨论,分不同情 ...

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

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

  3. 洛谷P2602 数字计数 [ZJOI2010] 数位dp

    正解:数位dp 解题报告: 传送门! 打算在寒假把学长发过题解的题目都做辣然后把不会的知识点都落实辣! ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 然后这道题,开始想到的时候其实想到的是大模拟,就有点像之前考试贪 ...

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

    洛谷 第一次找规律A了一道紫题,写篇博客纪念一下. 这题很明显是数位dp,但是身为蒟蒻我不会呀,于是就像分块打表水过去. 数据范围是\(10^{12}\),我就\(10^6\)一百万一百万的打表. 于 ...

  5. 洛谷教主花园dp

    洛谷-教主的花园-动态规划   题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价 ...

  6. 洛谷 p6858 深海少女与胖头鱼 洛谷月赛 期望dp

    洛谷10月月赛 2 t2 深海少女与胖头鱼 题目链接 参考资料:洛谷10月赛2讲评ppt; 本篇题解考完那天就开始写,断断续续写到今天才写完 本题作为基础的期望dp题,用来学习期望dp还是很不错的 ( ...

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

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

  8. 【洛谷P2602】数字计数

    题目大意:求 [a,b] 中 0-9 分别出现了多少次. 题解:看数据范围应该是一个数位dp. 在 dfs 框架中维护当前的位置和到当前位置一共出现了多少个 \(x,x\in [0,9]\).因此,用 ...

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

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

随机推荐

  1. json解决ajax跨域的原理

    jsonp只能解决GET类型的ajax请求跨域问题 jsonp请求不是ajax请求,而是一般的get请求 基本原理 浏览器端: 动态生成<script>来请求后台接口(src就是接口的ur ...

  2. C++之封装继承和多态

    C++中非常重要的概念,尤其是相对于C语言而言,也是其具有如此高的工程使用性的重要原因. 封装 所谓封装是将某些东西隐藏起来,让外界无法直接使用,而必须通过某些特定的方式才能访问.也即是,将抽象得到的 ...

  3. Laravel-权限系统

    总结Auth中间件用于定义未登录用户只能操作哪些权限policy授权策略定义了当前用户实例与进行授权的用户是否匹配,一致才能进一步操作,否则返回403禁止访问异常场景:用户登录 Auth步骤 找到需要 ...

  4. E-factory

    E-factory为生成XML和HTML提供了一种简单而紧凑的语法 # coding:utf-8 from lxml.builder import E def CLASS(*args): # clas ...

  5. 你可能会忽略的 Git 提交规范

    一.为什么需要规范? 无规矩不成方圆,编程也一样. 如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你.可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目 ...

  6. Java学习 1.4——第一个Java程序:Hello World!

    这一篇一起来写第一个Java程序,同时也了解一下IDEA的使用: 打开IDEA,新建项目: 选择Java,右边project SDK是选择Java版本,上一篇我们自己安装了JDK1.8,IDEA自带一 ...

  7. 005 C/C++ 数据类型_void

    1.void的字面意思是'无类型'.void * 是无类型指针,void * 可以指向任何类型的数据. 2.数据类型的分装: int InitHardEnv(void ** handle); 典型的内 ...

  8. Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结

    前言 都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统.跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持,以避开GPL开源协议限制的HAL ...

  9. UML工具-1-StarUML下载及破解

    UML工具-StarUML   下载地址   http://staruml.io/  

  10. FFT/NTT初探

    做了全家桶然后写了几道入门题. FFT.ref NTT.ref Luogu4238 [模板]多项式求逆 Link 套牛顿迭代完事.有一个细节问题是:这次运算多项式有几项就只赋几项的值,其他位置(次数大 ...