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 ...
随机推荐
- Python 解LeetCode:23. Merge k Sorted Lists
题目描述:把k个排序的链表组成的列表合并成一个排序的链表 思路: 使用堆排序,遍历列表,把每个列表中链表的头指针的值和头指针本身作为一个元素放在堆中: 第一步中遍历完列表后,此时堆中最多会有n个元素, ...
- DP+线段树维护矩阵(2019牛客暑期多校训练营(第二场))--MAZE
题意:https://ac.nowcoder.com/acm/contest/882/E 给你01矩阵,有两种操作:1是把一个位置0变1.1变0,2是问你从第一行i开始,到最后一行j有几种走法.你只能 ...
- [游戏复刻] 2048(2014. Android)
等哪一天我有很多很多的时间再写吧...
- python学习-9 pycharm的安装
1.python 开发IDE : pycharm.eclipse等等 安装: 百度搜索pycharm 就可以了,去官网下载专业版.(百度有各种破解方法) #不要 ...
- Qt使用自带的windeployqt 查找生成exe 必需的库文件
集成开发环境 QtCreator 目前生成图形界面程序 exe 大致可以分为两类:Qt Widgets Application 和 Qt Quick Application.下面分别介绍这两类exe ...
- Ubuntu12.04 root登陆方法【保证有效】
su -取得root权限后,gedit /etc/lightdm/lightdm.conf ,里面的内容全部改为 [SeatDefaults] greeter-session=unity-greete ...
- Vector , list 和 deque的区别
vector 表示一段连续的内存区域,每个元素被顺序存储在这段内存中,对vector 的随机访问效率很高,但对非末尾元素的插入和删除则效率非常低. deque 也表示一段连续的内存区 ...
- 14 Django之Form和Model Form组件
一.什么是Form 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用 ...
- SuperMap iClient3D for WebGL 9D怎么将s3m图层的纹理变更精细些
设置S3MTilesLayer.lodRangeScale.默认值是1,设的越小越精细,最小值是0.01.越大越模糊,最大值是100
- Python与C/C++相互调用(转)
原文链接 作者 一.问题 Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结. 二.Python调用C/C++ 1.Python调用C动态链接库 Python调用C库 ...