HDU2089 不要62 题解 数位DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089
题目大意:求区间 \([l,r]\) 范围内不包含数字“4”且不包含连续的数字“62”的数的数量。
解题思路:
数位DP 入门题。
我们开一个函数 dfs(int pos, int stat, bool limit) ,其中:
- pos表示目前将要访问的数的位置;
- pre表示前一个值是不是6,因为这里涉及到62连数(而单个4不需要存储之前的状态, stat \(=1\) 说明前一个数是6,\(=0\) 活命前一个数不是6),所以我们在访问到后一位的时候要考虑前一位,这里pre就用于存储前一位;
- limit表示是不是在边界位置(limit \(=1\) 表示目前处于限制范围内;\(=0\) 表示目前未处于限制范围内)。
实现代码如下:
#include <bits/stdc++.h>
using namespace std;
int a[20], f[20][2];
int dfs(int pos, int stat, bool limit) {
if (pos < 0) return 1; // 说明找到了1种情况
if (!limit && f[pos][stat] != -1) return f[pos][stat];
int up = limit ? a[pos] : 9;
int tmp = 0;
for (int i = 0; i <= up; i ++) {
if (i == 4 || stat && i == 2) continue;
tmp += dfs(pos-1, i==6, limit && i==up);
}
if (!limit) f[pos][stat] = tmp;
return tmp;
}
int get_num(int x) {
int pos = 0;
while (x) {
a[pos++] = x % 10;
x /= 10;
}
return dfs(pos-1, 0, true);
}
int main() {
int l, r;
memset(f, -1, sizeof(f));
while (~scanf("%d%d", &l, &r) && l) {
printf("%d\n", get_num(r) - get_num(l-1));
}
return 0;
}
HDU2089 不要62 题解 数位DP的更多相关文章
- ☆ [HDU2089] 不要62「数位DP」
类型:数位DP 传送门:>Here< 题意:问区间$[n,m]$的数字中,不含4以及62的数字总数 解题思路 数位DP入门题 先考虑一般的暴力做法,整个区间扫一遍,判断每个数是否合法并累计 ...
- HDU2089 ------不要62(数位dp)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu2089不要62(数位dp)
#include <stdio.h> #include <string.h> ][]; ]; /* dp[i][0] 不含62,4 dp[i][1] 2开头 dp[i][2] ...
- 题解——HDU 2089 不要62(数位DP)
最近在学数位DP 应该是入门题吧 设\( dp[i][0/1] \)表示到第\( i \)位时,前一位是否是6的满足条件的数的个数 然后就是套路 注意\( limit \)的限制条件以及转移时候信息的 ...
- HDU 2089 不要62 (数位DP)题解
思路: 详解 数位DP入门题dp[pos][sta],pos代表当前位数是第几位,sta代表当前状态,因为题目中只要不出现64,所以当前状态只分为两种:前一位是6或不是. #include<io ...
- HDU 2089 不要62(数位dp入门)
题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 题解:这是数位DP的入门题了,首先要理解数DP的原理,DP[i][j]:代表第i位的第j值,举个栗子:如4715 数位数是从右向 ...
- hdu2089 不要62--经典数位DP
一道十分经典的数位DP的题目. dp[i][j]表示最高位是数字i,连同最高位在内共有j位.注意边界的初始化. 接下来就是区间划分,特殊情况处理.....对了,如果不知道自己的方法是否正确,可以写一个 ...
- HDU 2089 不要62 【数位dp】
<题目链接> 不要62 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照 ...
- HDU 2089 不要62(数位dp模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内不包含4和连续62的数的个数. 思路: 简单的数位dp模板题.给大家推荐一个好的讲解博客.h ...
随机推荐
- NetBeans配置
NetBeans下载链接:https://netbeans.org/downloads/8.2/ 选择PHP×64版本 NetBeans 安装插件Darcula LAF for NetBeansctr ...
- linux lvm删除导致无法启动
要想编辑/etc/fstab文件,我们需要在系统中重新挂载根目录,使其具有可读写状态,使用如下命令: mount -o remount,rw / 该条命令的作用是,以可读写的形式重新挂载根分区. 然后 ...
- [kuangbin带你飞]专题九 连通图E POJ 3177 Redundant Paths
这个题最开始我想的是,直接缩点求双连通分量,连接这些双联通分量不就行了吗? 但是其实是不对的,双连通内部双联通,我们如果任意的连接一条边在这些双联通分量之间,他们之间有没有桥其实并不知道. 我应该是求 ...
- supersockets支持热更新的服务器实例配置选项
SuperSocket 支持以下配置选项的热更新: * logCommand * idleSessionTimeOut * maxRequestLength * logBasicSessionActi ...
- Cisco 交换机笔记
最近使用 Cisco L3(C3560X), L2(2960) 交换机搭建了 VLAN 环境,其中包括了 VLAN 的配置, VLAN 间的路由等,在此写篇笔记记录下. VLAN 结构 L3 Swit ...
- 快速理解bootstrap,bagging,boosting,gradient boost-三个概念
1 booststraping:意思是依靠你自己的资源,称为自助法,它是一种有放回的抽样方法,它是非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法. 其核心思想和基本步骤如下: (1 ...
- pytorch nn.LSTM()参数详解
输入数据格式:input(seq_len, batch, input_size)h0(num_layers * num_directions, batch, hidden_size)c0(num_la ...
- mac 安装 adb
安装命令 brew cask install android-platform-tools 测试安装情况 adb devices 设备打开开发者模式 略 查看log并过滤出设备id adb logca ...
- @JsonIgnore @JsonIdentityInfo 处理Hibernate 循环引用的问题
enterprise和user一对一的关系: @Entity @Table(name = "enterprise") public class Enterprise extends ...
- zeppelin开启多个
conf/zeppelin-env.sh 添加行: export ZEPPELIN_PID_DIR=/xx/zeppelin/run_2