很久以前就。。。但是一直咕咕咕


思路:数位$DP$

提交:1次

题解:见代码

#include<cstdio>
#include<iostream>
#include<cstring>
#define ll long long
#define R register ll
using namespace std;
ll f[][],a,b;
//f[l][sum]对应dfs中(因为只在!ul&&!ck的时候记忆化)
int num[];
ll dfs(int l,bool ul,bool ck,int lst,int sum) {//l剩余位数,ul上界标记,ck前导零标记,lst为所统计的数,sum是统计出现了几次合法的数字
if(!l) return sum;
if(!ul&&!ck&&~f[l][sum]) return f[l][sum];//记忆化
R mx=(ul?num[l]:),cnt=;//判断上界
for(R i=;i<=mx;++i)
cnt+=dfs(l-,ul&&(i==mx),ck&&!i,lst,sum+((!ck||i)&&(i==lst)));//sum++,当且仅当不是一直是前导零或有数,同时是所统计的数
return ul||ck?cnt:f[l][sum]=cnt;//记忆化
}
inline ll solve(ll x,int n) {
R len=; memset(f,0xff,sizeof(f));
for(;x;x/=) num[++len]=x%;//按位分解
return dfs(len,true,true,n,);
}
signed main() {
scanf("%lld%lld",&a,&b);
for(R i=;i<=;++i) printf("%lld ",solve(b,i)-solve(a-,i));//前缀和
putchar('\n');
} #include<cstdio>
#include<iostream>
#include<cstring>
#define R register int
using namespace std;
int a,b,f[][],num[];
//f[i][j]搜到第i位,前一位是j,且没有上界标记的方案数
inline int max(int a,int b){return a>b?a:b;}
inline int abs(int x){return x>?x:-x;}
int dfs(int l,bool ul,bool ck,int lst) {//l位数,ul上界标记,ck前导零标记,lst上一位
if(!l) return ;
if(!ul&&(~f[l][lst])) return f[l][lst];//记忆化
R mx=ul?num[l]:,cnt=;//mx是上界
for(R i=;i<=mx;++i) {
if(abs(lst-i)<) continue;//差小于2
if(ck&&i==) cnt+=dfs(l-,ul&&i==mx,true,-);//若一直是前导零
else cnt+=dfs(l-,ul&&i==mx,false,i);
} return ul||ck?cnt:f[l][lst]=cnt;
}
inline int solve(int x) {
R len=; memset(f,0xff,sizeof(f));
for(;x;x/=) num[++len]=x%;
return dfs(len,true,true,-);
}
signed main() {
scanf("%d%d",&a,&b);
printf("%d\n",solve(b)-solve(a-));//前缀和减一下
}

2019.07.18

Luogu P2602 [ZJOI2010]数字计数 数位DP的更多相关文章

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

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

  2. Luogu P2602 [ZJOI2010]数字计数

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

  3. UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)

    题目链接 \(Description\) 求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示). \(Solution\) 对每位分别DP.注意考虑前导0: 在最后统 ...

  4. [ZJOI2010]数字计数 数位DP

    最近在写DP,今天把最近写的都放上来好了,,, 题意:给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 首先询问的是一个区间,显然是要分别求出1 ~ r ,1 ...

  5. [luogu2602 ZJOI2010] 数字计数 (数位dp)

    传送门 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output ...

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

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

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

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

  8. 【题解】P2602 数字计数 - 数位dp

    P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中 ...

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

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

随机推荐

  1. [游戏复刻] 2048(2014. Android)

    等哪一天我有很多很多的时间再写吧...

  2. idea 如何加入插件SonarLint

    idea 如何加入插件SonarLint   IDEA的插件安装有两种方法:一是在线安装:二是离线安装,即将插件的安装包下载以后从本地安装.   一.在线安装的过程:         1.打开IDEA ...

  3. USB协议基础知识

    ref : https://blog.csdn.net/u010142953/article/details/82627591 USB 基本知识  USB的重要关键概念:  1. 端点:位于USB设备 ...

  4. table html

    <html><head><title>demo-110101</title><style type="text/css"> ...

  5. Python中异常打印——面向程序猿

    import logging # logging.disable(logging.CRITICAL) logging.basicConfig(filename="loggingBug.txt ...

  6. redis 命令行操作报错

    向redis集群写数据抛异常:(error) MOVED 15342 2001:fecc:0:616::34:6383 原因是启动redis-cli时未以集群方式启动,即后面要加上 -c redis- ...

  7. 三种定位+堆叠+li小黑点变图片

    定位: 定位分为三种: position:static(默认值) relation(相对定位):进行较小偏移,不会脱离文档流,原位置保留 absolute(绝对定位):脱离文档流,不占据页面空间,变成 ...

  8. centos7 firewall指定IP与端口、端段访问(常用)

    https://blog.csdn.net/yipianfuyunsm/article/details/99998332 https://www.cnblogs.com/co10rway/p/8268 ...

  9. 学习前端 第一天之html标签补充

    一.常用浏览器内核 Trident(IE内核) Gecko(firefox) webkit(Safari) Chromium/Blink(chrome) Blink(Opera) 二.常见标签回顾 a ...

  10. CompletionService异步非阻塞获取并行任务执行结果

    第1部分 问题引入 <Java并发编程实践>一书6.3.5节CompletionService:Executor和BlockingQueue,有这样一段话: "如果向Execut ...