Luogu P2602 [ZJOI2010]数字计数 数位DP
很久以前就。。。但是一直咕咕咕
思路:数位$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的更多相关文章
- 洛谷P2602 [ZJOI2010]数字计数(数位dp)
数字计数 题目传送门 解题思路 用\(dp[i][j][k]\)来表示长度为\(i\)且以\(j\)为开头的数里\(k\)出现的次数. 则转移方程式为:\(dp[i][j][k] += \sum_{t ...
- Luogu P2602 [ZJOI2010]数字计数
这算是一道数位DP的入门题了吧虽然对于我来说还是有点烦 经典起手式不讲了吧,\(ans(a,b)\to ans(1,b)-ans(1,a-1)\) 我们首先预处理一个东西,用\(f_i\)表示有\(i ...
- UVA.1640.The Counting Problem / BZOJ.1833.[ZJOI2010]数字计数(数位DP)
题目链接 \(Description\) 求\([l,r]\)中\(0,1,\cdots,9\)每个数字出现的次数(十进制表示). \(Solution\) 对每位分别DP.注意考虑前导0: 在最后统 ...
- [ZJOI2010]数字计数 数位DP
最近在写DP,今天把最近写的都放上来好了,,, 题意:给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 首先询问的是一个区间,显然是要分别求出1 ~ r ,1 ...
- [luogu2602 ZJOI2010] 数字计数 (数位dp)
传送门 Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output ...
- 洛谷P2602 [ZJOI2010]数字计数 题解 数位DP
题目链接:https://www.luogu.com.cn/problem/P2602 题目大意: 计算区间 \([L,R]\) 范围内 \(0 \sim 9\) 各出现了多少次? 解题思路: 使用 ...
- 数位dp详解&&LG P2602 [ZJOI2010]数字计数
数位dp,适用于解决一类求x~y之间有多少个符合要求的数或者其他. 例题 题目描述 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除 ...
- 【题解】P2602 数字计数 - 数位dp
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数 \(a\) 和 \(b\) ,求在 \([a,b]\) 中的所有整数中,每个数码(digit)各出现了多少次. 输入格式 输入文件中 ...
- P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业
P2602 [ZJOI2010]数字计数 题解 DFS 恶心的数位DP 对于这道题,我们可以一个数字一个数字的求 也就是分别统计区间 [ L , R ] 内部数字 i 出现的次数 (0<=i&l ...
随机推荐
- 使用pycharm开发web——django2.1.5(三)创建models并进入交互界面shell做一些简单操作
这里model可以认为是数据对象本身 相当于在写java代码时候model目录下创建的实体类,models.py 中可以包含多个实体类,感觉这个操作挺骚的 下面是polls app里面的models, ...
- Mac查看端口号是否被占用及释放
1.查看使用端口进程 lsof -i: 端口号 2.释放进程 kill 你的PID 3.再次执行第一步,是否无进程占用 lsof -i: 端口号
- SQL0668N Operation not allowed for reason code "3" on table "TEST". SQLSTATE=57016
问题描述: 查询,操作表都报如下错误 SQL0668N Operation not allowed for reason code "3" on table "TEST ...
- MySQL中的InnoDB中产生的死锁深究
查考地址:https://blog.csdn.net/loophome/article/details/79867174 待研究中.....
- shiro小记
今天主要看了Shiro的认证,授权功能初步了解了一下,其他的功能用的不多,之后再看. 先说一下Shiro的三个核心概念: 1.Subject: 代表当前正在执行操作的用户,但Subject代表的可以是 ...
- Linux (x86) Exploit 开发系列教程之四(使用return-to-libc绕过NX bit)
(1)原理: “NX Bit”的漏洞缓解:使某些内存区域不可执行,并使可执行区域不可写.示例:使数据,堆栈和堆段不可执行,而代码段不可写. 在NX bit打开的情况下,基于堆栈的缓冲区溢出的经典方法将 ...
- Java并发与多线程教程(2)
Java同步块 Java 同步块(synchronized block)用来标记方法或者代码块是同步的.Java同步块用来避免竞争.本文介绍以下内容: Java同步关键字(synchronzied) ...
- 手机号码归属地查询API
<?php function object_array($array){ if(is_object($array)){ $array = (array)$array; } if(is_array ...
- arcgis js 之 渔网工具(调用地图服务)
arcgis js 之 渔网工具(调用地图服务) 原理: 简历不同级别的网渔网图层,设置显示比例尺.然后发布服务,使用MapImageLayer接收. 过程: 1.在arcmap中用创建渔网工具将不同 ...
- SpringCloud之Feign声明式调用原理及配置
1 什么是Feign Feign是一种声明式.模板化的HTTP客户端(仅在Application Client中使用).声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求. ...