#2089: 不要62 (数位dp模板题,附带详细解释)
题目链接
题意:问区间[n,m]中,不含数字4,也不含数字串“62”的所有数的个数。
思路:可以转化成求区间[0,x]
第一次接触数位dp,参考了这几篇博客。
比较重要的前提:
**¨对于一个小于n的数,肯定是从高位到低位出现某一位
¨如 n = 58 n为十进制数。
**¨ x = 49 此时x的十位
**¨ x = 51 此时x的个位
**¨有了上述性质,我们就可以从高到低枚举第一次
这样之前的位确定了,之后的位就不受n的限制即从00…0~99…9,可以先预处理
以及写成递归形式代码会简洁很多,所以就写了递归形式。
更详细的解释参加代码注释。
#include<bits/stdc++.h>
#define fst first
#define sec second
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ms(a,x) memset(a,x,sizeof(a))
typedef long long LL;
#define pi pair < int ,int >
#define MP make_pair
using namespace std;
const double eps = 1e-8;
const int dx[4] = { 1,0,0,-1 };
const int dy[4] = { 0,1,-1,0 };
const int inf = 0x3f3f3f3f;//1061109567
int n, m;
int dp[30][2];
int digit[30];
int dfs(int pos, bool preis6, bool limit) {//pos表示从低到高的第几位,是从高位往低位递归的(也就是从左到又)
// preis6 表示上一个数字是否为6,
// limit表示该位置是否有限制。
//cout<<pos<<" "<<preis6<<" "<<limit<<" "<<endl;
if (!pos)return 1;//到该位置表明找到了一个解.
int res = 0;
//如果不是limit位置,表示结果是通用的,而之前又算过的话,就可以直接调用这个结果。
if (!limit && dp[pos][preis6] != -1)return dp[pos][preis6];
//mx第pos位置能取到的最大的数字..如果不是limit,则可以0..9任意取。
int mx = limit ? digit[pos] : 9;
//cout<<"mx:"<<mx<<endl;
for (int i = 0; i <= mx; i++)
{
if (i == 4 || (i == 2 && preis6)) continue;
res += dfs(pos - 1, i == 6, limit&&i == mx);
//(limit&&i==mx)中limit的含义是。。如果当前一位不是limit位(即0..9可以随便取的位置)
//,那么之后的位置也一定不是limit位置。
//而i==mx部分的意思是,在当前位置的数字小于当前位置的数字能取的最大值(mx)之前,
//后面位的数字随便取也不会超过上界。
}
if (!limit) dp[pos][preis6] = res; //记忆化. 非limit位的结果才通用,不然没必要存。
return res;
}
int solve(int n) {
ms(digit, 0);
int len = 0;
//将数按照每一位存到digit数组中
while(n) {
digit[++len] = n % 10;
n /= 10;
}
return dfs(len, false, true);
}
int main() {
ios::sync_with_stdio(false);
while (cin >> n >> m && n&& m) {
ms(dp, -1);
int ans = solve(m) - solve(n - 1);
cout << ans << endl;
}
return 0;
}
#2089: 不要62 (数位dp模板题,附带详细解释)的更多相关文章
- HDU 2089 不要62 数位DP模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 参考博客:https://www.cnblogs.com/HDUjackyan/p/914215 ...
- HDU 2089 - 不要62 - [数位DP][入门题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...
- hdu 2089 不要62 (数位dp基础题)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 2089 不要62(数位dp模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内不包含4和连续62的数的个数. 思路: 简单的数位dp模板题.给大家推荐一个好的讲解博客.h ...
- HDU 2089 不要62(数位DP·记忆化搜索)
题意 中文 最基础的数位DP 这题好像也能够直接暴力来做 令dp[i][j]表示以 j 开头的 i 位数有多少个满足条件 那么非常easy有状态转移方程 dp[i][j] = sum{ dp[ ...
- [hdu 2089] 不要62 数位dp|dfs 入门
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求[n, m]区间内不含4和62的数字个数. 这题有两种思路,直接数位dp和dfs 数位d ...
- Hdu 2089 不要62 (数位dp入门题目)
题目链接: Hdu 2089 不要62 题目描述: 给一个区间 [L, R] ,问区间内不含有4和62的数字有多少个? 解题思路: 以前也做过这个题目,但是空间复杂度是n.如果数据范围太大就GG了.今 ...
- 【hdu6148】Valley Numer【数位dp模板题】
题意 对于每组数据给出一个整数n(length(n)<=100),找出不大于n的数字中有多少是Valley Numer.对于Valley的定义是它每一位的数字要么是递增,要么是递减,要么是先递减 ...
- 51nod 1009 - 数字1的数量 - [数位DP][模板的应用以及解释]
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1009 基准时间限制:1 秒 空间限制:131072 KB 给 ...
- hdu 2089 不要62 数位dp
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- JAVA学习9/29
1.继承extends//关键字 1.1.测试:子类继承父类后,能使用子类对象调用父类方法吗? 可以,因为子类继承父类后,这个该方法就属于子类了. 当然可以使用子类对象来调用 1.2.在实际开发中,满 ...
- JavaWeb项目练习(学生选课管理系统)一
打算做一个选课管理系统,作为期末的复习. 上需求 2.1 页面要求 (1)系统可以通过浏览器直接访问:(1分) (2)各个功能页面整体风格统一:(2分) (3)首页为用户登录页面,管理员.教师.学生三 ...
- VCS用法
1.时钟频率点击,鼠标左键点击波形上升沿,中间滚轮点击,然后选择hz,就显示当前信号时钟频率. 2.窗口乱掉,找不到文件列表,右下角点击弹出选择instance. 3.bus地址查找,选择信号,然后蓝 ...
- 给祖传系统做了点 GC调优,暂停时间降低了 90%
问题描述 公司某规则引擎系统,在每次发版启动会手动预热,预热完成当流量切进来之后会偶发的出现一次长达1-2秒的Young GC(流量并不大,并且LB下的每个节点都会出现该情况) 在这次长暂停之后,每一 ...
- Linux下安装不同python版本的虚拟环境
使用的是virtualenv工具安装的虚拟环境. virtualenv是一个用来建立虚拟的python环境,通常情况下,可能会碰到各种python环境,但是只有一台电脑,virtualenv就派上用场 ...
- 太牛叉了!国产 AI 智能体惊艳问世,全面致敬 FastGPT!
太震撼了!太厉害了!昆仑万维正式发布了「天工 SkyAgents」平台,助力大模型走入千家万户.你听听,这个名字一听就有一种巧夺天工的感觉,技艺那是相当的高超. 这个平台基于昆仑万维「天工大模型」打造 ...
- 【C++】【图像处理】灰度直方图实现算法解析(以.raw格式的图像为基础进行图像处理、gray levels:256)
前情提要:本记录需要一定的C++和图像处理基础进行阅读. 图像处理算法学习记录: Code: 1 void histCompute(BYTE*image, int width, int height) ...
- 使用kubeadm在Centos8上部署kubernetes1.18
// 查看系统版本 cat /etc/centos-release CentOS Linux release 8.1.1911 (Core) // 如果系统环境为8.0(云服务器默认最大安装环境为8. ...
- idea2020下载、安装、破解、配置
idea2020下载.安装.破解.配置 idea2020下载 [推荐]官方下载地址:https://www.jetbrains.com/idea/download/other.html 进入后往下找, ...
- Hugging Face 年度回顾:2023,开源大模型之年
在 2023 年,大型语言模型(Large Language Models,简称 LLMs)受到了公众的广泛关注,许多人对这些模型的本质及其功能有了基本的了解.是否开源的议题同样引起了广泛的讨论.在 ...