hdu:2089 ( 数位dp入门+模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089
数位dp的模板题,统计一个区间内不含62的数字个数和不含4的数字个数,直接拿数位dp的板子敲就行,注意每次调用solve函数要初始化dp数组,否则之前调用的时候dp数组可能被记录过。
AC代码:
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<set>
using namespace std;
const int maxn = 10;
int dp[maxn][3][3],nums[maxn];//dp[i][j][k] i表示当前第几位,j表示上一位是否为6,k表示是否受上一位限制
int dfs(int pos,bool pre,bool limit){
if(pos == 0) return 1; //搜索到第0位,返回
if(dp[pos][pre][limit] != -1) return dp[pos][pre][limit];//记忆化,如果搜索过就返回
int up = limit?nums[pos]:9;//判断受上一位影响就
int res = 0;
for(int i = 0;i<=up;i++){
if(i == 4 || (pre && i == 2)) continue;
res += dfs(pos-1,i == 6,limit && i == up);//统计满足条件的个数,递归
}
dp[pos][pre][limit] = res;
return res;
}
int solve(int up){
int k = 1;
while(up){//数位分离
nums[k] = up%10;
k++;
up/=10;
}
return dfs(k-1,0,1);
}
int main(){
int n,m;
while(scanf ("%d%d", &n, &m) != EOF){
if(n == 0 && m == 0) break;
memset(dp,-1,sizeof(dp));
int t1 = solve(m);
memset(dp,-1,sizeof(dp));
int t2 = solve(n-1);
printf("%d\n",t1-t2);
}
return 0;
}
hdu:2089 ( 数位dp入门+模板)的更多相关文章
- HDU 2089 数位dp入门
开始学习数位dp...一道昨天看过代码思想的题今天打了近两个小时..最后还是看了别人的代码找bug...(丢丢) 传说院赛要取消 ? ... 这么菜不出去丢人也好吧~ #include<stdi ...
- 不要62(HDU 2089数位dp入门)
题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 分析:dp[i][f]数字表示不含 4 和 62的前提下,剩余长度为 len ,首位是否为 6 的个数. #include < ...
- hdu 2089 数位dp入门题
#include<stdio.h> //dp[i][0]代表不存在不吉利数字 //dp[i][1]代表不存在不吉利数字但是以2开头 //dp[i][2]代表存在不吉利数字 #define ...
- hdu 2089 数位dp
链接:https://vjudge.net/problem/23625/origin 中文,题目不用说了. 其实这题的数据很小,所以直接暴力也可以过,但是还是要学会数位dp,因为并不是每一题的数据都会 ...
- HDU 2089 数位dp/字符串处理 两种方法
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 3555 数位dp入门
开始想用dp[i][j]来记录第i位j开头含有49的数的个数 但是init后并不知道如何进行cal 想了想可以用不要62的思想 当作不要49来做 然后减一下 就好 看网上的代码 不要62和这道题用的d ...
- HDU - 2089 数位DP 初步
中文题目,不要62和4 从高位往低位DP,注意有界标志limit的传递 dp2记忆有界情况下的计数结果,据说用处不大 我所参考的入门文章就是半搜索(有界)半记忆(无界)的 进阶指南中提出dfs维度有多 ...
- 杭电hdu 2089 数位dp
杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍 ...
- HDU 2089 不要62【数位DP入门题】
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- GNU Radio无线通信嗅探基础
文章内容简介 1.使用哪些grc模块完成我们的嗅探工作 2.如何选择参数以获取最完美的波形 3.如何从波形还原回数据 我接下来会使用电视棒(RTL-SDR)嗅探一个固定码遥控锁开发组件. 我使用如下的 ...
- php 常用数学函数
函数 描述 实例 输入 输出 abs() 求绝对值 $abs = abs(-4.2); //4.2 数字 绝对值数字 ceil() 进一法取整 echo ceil(9.999); // 10 浮点数 ...
- java - 并发集合 Vector、synchronizedCollection、CopyOnWriteArrayList之间的区别。
概要 JDK中提供ArrayList集合方便我们对集合内元素进行增删改查,但是ArrayList为了能够在单线程中快速进行操作其设计并不支持多线程进行操作.ArrayList在多线程环境下可能会产生j ...
- python语言基础3
一:python函数 是组织好的,可重复使用的,用来实现单一,或相关联功能的代码块.以前使用过的一些Python提供的内建函数,如print().max(4,18).min(100,50).当然我们自 ...
- Win10安装5 —— 系统安装步骤
本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12369698.html 1.打开U盘中的解压好的文件夹后,双击打开"s ...
- Win10安装1 —— 引言与目录
本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12368107.html 一:引言 众所周知,电脑出现问题了后,重启 可以解决90 ...
- HDU-1506 Largest Rectangle in a Histogram【单调栈】
Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base l ...
- 《深入理解java虚拟机》读书笔记八——第九章
第九章 类加载及执行子系统的案例与实战 Q:如果有10个WEB应用程序都是用Spring来进行组织管理的话,可以把Spring放到Common或Shared目录下(Tomcat5.0)让这些程序共享. ...
- cmd 下sql语句及结果
Microsoft Windows [版本 10.0.14393](c) 2016 Microsoft Corporation.保留所有权利. C:\Users\李长青>mysql -uroot ...
- "换行"和"回车"的来历
\r: return 到当前行的最左边. \n: newline 向下移动一行,并不移动左右. Linux中\n表示:回车+换行: Windows中\r\n表示:回车+换行. Mac中\r表示:回车+ ...