HDU 2089

求给定区间内不含62和4的数的个数。

数位dp入门。从这里我清楚了一些数位dp的用法。比如limit是判断是否达到上界,而且需要判断(!limit).。比如若题目要求不含11的个数,举例来说:区间在[1,215],当百位开始枚举为0时,十位枚举1,个位可以取0,2~9,即dp[0][1]=9,表示枚举到个位前一位为1时满足的个数,当然此时除了1都满足。而回溯枚举到百位为2,十位为1时,由于dp[0][1]已经枚举了,可以直接返回,但此时返回时有错误的,dp[0][1]=9,而百位为2,十位为1,个位是有限制的。所以记忆化判断是必须要有(!limit),否则会造成重复且答案错误。

所以可以设计dp[pos][sta]表示枚举到第pos为状态为sta时的合法个数。sta指前一位是否为6,所以sta=0或sta=1。

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int dp[20][2];
 5 int digit[20];
 6
 7 int dfs(int pos,int pre,int sta,bool limit)
 8 {
 9     if(pos==-1) return 1;
10     if(!limit&&dp[pos][sta]!=-1) return dp[pos][sta];
11     int up=limit?digit[pos]:9;
12     int tmp=0;
13     for(int i=0;i<=up;i++){
14         if(pre==6&&i==2) continue;
15         if(i==4) continue;
16         tmp+=dfs(pos-1,i,i==6,limit&&i==digit[pos]);
17     }
18     if(!limit) dp[pos][sta]=tmp;
19     return tmp;
20 }
21
22 int solve(int x)
23 {
24     int pos=0;
25     while(x){
26         digit[pos++]=x%10;
27         x/=10;
28     }
29     return dfs(pos-1,-1,0,true);
30 }
31
32 int main()
33 {
34     int n,m;
35     while(cin>>n>>m,!(n==0&&m==0))
36     {
37         memset(dp,-1,sizeof(dp));
38         cout<<solve(m)-solve(n-1)<<endl;
39     }
40     return 0;
41 }

既然sta已包含前一位的信息,所以我觉得dfs时不记录pre也行。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int N=10;
 6 int dp[N][2];
 7 int digit[N];
 8
 9 int dfs(int pos,int sta,bool limit)
10 {
11     if(pos==0) return 1;
12     if(!limit&&dp[pos][sta]!=-1) return dp[pos][sta];
13     int up=limit?digit[pos]:9;
14     int ans=0;
15     for(int i=0;i<=up;i++){
16         if(sta&&i==2) continue;
17         if(i==4) continue;
18         ans+=dfs(pos-1,i==6,limit&&i==digit[pos]);
19     }
20     if(!limit) dp[pos][sta]=ans;
21     return ans;
22 }
23
24 int solve(int x)
25 {
26     int pos=0;
27     while(x)
28     {
29         digit[++pos]=x%10;
30         x/=10;
31     }
32     return dfs(pos,0,true);
33 }
34
35 int main()
36 {
37     int n,m;
38     while(cin>>n>>m,!(n==0&&m==0))
39     {
40         memset(dp,-1,sizeof(dp));
41         cout<<solve(m)-solve(n-1)<<endl;
42     }
43     return 0;
44 }

转载于:https://www.cnblogs.com/zxhyxiao/p/7497296.html

hdu 2089 不要62【数位dp】相关推荐

  1. HDU 2089 不要62 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目描述: 给定一个区间, 让你求这个区间中所有不带62 或 4 的数的个数 解题思路: 很明 ...

  2. Hdu 2089-不要62 数位dp

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=2089 不要62 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  3. HDU - 2089 不要62 【暴力打表】【数位DP】

    不要62 HDU - 2089 题意 求区间[n,m]之间有多少个数字不含4或者连续的62 解法1 由于数据范围是0~1e6,所以直接暴力判断每一位数字是否含有4或者62,然后求前缀和即可 #incl ...

  4. HDU 2089 不要62(数位DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意 求一个区间内,不出现4和连续的62的数的个数. 分析 可以暴力打表.也可以数位DP. 设: ...

  5. [HDU]2089不要62

    http://acm.hdu.edu.cn/showproblem.php?pid=2089 这道题跟Bomb(http://www.cnblogs.com/sjy123/p/3247731.html ...

  6. 不要62 ---数位DP

    题意:求m到n中不含62和4的数的个数. 题目链接 思路:数位dp模板求满足的数字或不满足的数字,刚学,就求不满足的数. #include<stdio.h> #include<str ...

  7. HDU 6156 Palindrome Function 数位DP

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...

  8. hdu2089 不要62 数位dp

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

  9. HDU 2089 不要62

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

最新文章

  1. Springboot:开发时工程启动慢
  2. 使用存储过程创建分页
  3. 用户访问网站的基本流程
  4. Java最佳实践–多线程环境中的DateFormat
  5. count(*),count(1),count(0)效率
  6. 棋盘问题(信息学奥赛一本通-T1217)
  7. 理论基础 —— 排序 —— 计数排序
  8. QT5开发及实例学习之十三Qt5文本编辑功能
  9. oracle获取sysdba权限,Oracle 学习笔记: SYSDBA登陆权限问题
  10. error This module isn‘t specified in a package.json file.
  11. 微信们正在成为“被模仿者”!中国互联网现状及趋势报告
  12. Mac上Jupyter notebook代码补全
  13. GetAsyncKeyState() 0x8000
  14. 1.2 cacti安装
  15. Android反编译:使用dex2jar查看dex文件
  16. STM32之WiFi模块的功能、选型及使用
  17. revit二次开发概念_Revit二次开发那些事儿
  18. 好用到爆炸的Chrome谷歌插件下载——妈妈再也不用担心我找不到好的插件了
  19. Linux: systemd 启动代码分析
  20. 【03】品优购电商项目:00-品优购项目代码规范

热门文章

  1. 静态属性、类方法、静态方法
  2. Spring07----Bean的作用域
  3. [Swift实际操作]七、常见概念-(13)使用UIScreen查询设备屏幕信息
  4. 右侧快速入口滑动时左侧跟着变化
  5. python---django中url路由分发
  6. ubuntu16.04安装teamviewer12
  7. c# 保存和打开文件的方法
  8. [Asp.net 5] DependencyInjection项目代码分析-目录
  9. 2的次幂表示【递归算法训练】
  10. Java NIO零拷贝