题目链接: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入门+模板)的更多相关文章

  1. HDU 2089 数位dp入门

    开始学习数位dp...一道昨天看过代码思想的题今天打了近两个小时..最后还是看了别人的代码找bug...(丢丢) 传说院赛要取消 ? ... 这么菜不出去丢人也好吧~ #include<stdi ...

  2. 不要62(HDU 2089数位dp入门)

    题意:统计区间 [a,b] 中不含 4 和 62 的数字有多少个. 分析:dp[i][f]数字表示不含 4 和 62的前提下,剩余长度为 len ,首位是否为 6 的个数. #include < ...

  3. hdu 2089 数位dp入门题

    #include<stdio.h> //dp[i][0]代表不存在不吉利数字 //dp[i][1]代表不存在不吉利数字但是以2开头 //dp[i][2]代表存在不吉利数字 #define ...

  4. hdu 2089 数位dp

    链接:https://vjudge.net/problem/23625/origin 中文,题目不用说了. 其实这题的数据很小,所以直接暴力也可以过,但是还是要学会数位dp,因为并不是每一题的数据都会 ...

  5. HDU 2089 数位dp/字符串处理 两种方法

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. HDU 3555 数位dp入门

    开始想用dp[i][j]来记录第i位j开头含有49的数的个数 但是init后并不知道如何进行cal 想了想可以用不要62的思想 当作不要49来做 然后减一下 就好 看网上的代码 不要62和这道题用的d ...

  7. HDU - 2089 数位DP 初步

    中文题目,不要62和4 从高位往低位DP,注意有界标志limit的传递 dp2记忆有界情况下的计数结果,据说用处不大 我所参考的入门文章就是半搜索(有界)半记忆(无界)的 进阶指南中提出dfs维度有多 ...

  8. 杭电hdu 2089 数位dp

    杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍 ...

  9. HDU 2089 不要62【数位DP入门题】

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

随机推荐

  1. JN_0009:win下快捷键注销,关机,重启

    注销:  wn + x  + U  再按 I 键 关机: win + x  + U  再按 U 键 重启: win + x  + U  再按 R 键

  2. vue中封装jsonp

    一.安装jsonp 二.封装

  3. java学习笔记之IO编程—File文件操作类

    1. File类说明 在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一一个与文件本身操作( ...

  4. uniGUI之自定义JS事件动作ClientEvents(30)

    sender.setText('Over'); MainForm.UniLabel1.setPosition(x, y); MainForm.UniLabel1.setText('Click!');

  5. 为什么SSL证书要设有效期?

    1.首先是为了安全考虑,CA机构不能保证一个网站永远是合法的,因此它需要定期检查网站. 2.其次,以往CA证书都非常贵,签发证书的机构通过设置期限来收费,是一种商业途径. 3.最后,还有最重要的原因就 ...

  6. DataGridView 定位到指定行

    //定位到指定行(样式)dataGridView1.ClearSelection();dataGridView1.Rows[selectIndex].Selected = true; //让指定行处于 ...

  7. Java 11 新垃圾回收器 ZGC

    可伸缩.低延迟的垃圾回收器 GC 暂停时间不超过 10ms 堆管理容量范围(小M级别,大到T级别) 对应用吞吐量影响不超过15%(对比 G1) 为进一步的添加新特性和优化做基础 默认支持 Linux/ ...

  8. Win10 JDK 环境变量配置

    1.安装JDK 到指定的目录 2.配置环境变量 2.1   配置 CLASSPATH    .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 2. ...

  9. Selenium自动化发送163邮箱

    自动化发送163邮件 方法一: import time import datetime from selenium import webdriver from selenium.webdriver.s ...

  10. date-fns时间库的基本使用

    在react中使用date-fns: import sub_days from 'date-fns/sub_days'; import start_of_week from 'date-fns/sta ...