hdu 2089 不要62

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089

题意:对于每次给出的一个区间,找出区间内多少个数字没有出现62和4。

思路:

数位DP入门题,对于dfs设置3个参数。

一个表示现在进行到第几位,

一个表示前一个标记状态,这里表示上一位是不是6。

一个表示是否现在是这位可以取到的最大的数字。

如果上一位是6,那么这位不可以取2。且当前位都不可以取4。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int dp[10][2], num[10];
 4 int dfs(int cur, int state, int limit)
 5 {
 6     if(cur < 0) return 1;
 7     if(!limit && dp[cur][state] != -1) return dp[cur][state];
 8
 9     int ret = 0;
10     int up = limit?num[cur]:9;
11     for(int i = 0; i <= up; i++)
12     {
13         if(state == 1 && i == 2 || i == 4) continue;
14         else ret += dfs(cur-1, i == 6, limit && i == up);
15     }
16     if(!limit) dp[cur][state] = ret;
17     return ret;
18
19 }
20 int slove(int x)
21 {
22     memset(dp, -1, sizeof(dp));
23     int cnt = 0;
24     while(x)
25     {
26         num[cnt++] = x % 10;
27         x /= 10;
28     }
29     return dfs(cnt-1, 0, 1);
30 }
31 int main()
32 {
33   //  freopen("in.txt", "r", stdin);
34   //  freopen("out.txt", "w", stdout);
35     int n, m;
36     while(~scanf("%d%d", &n, &m) && n+m)
37     {
38         printf("%d\n", slove(m) - slove(n-1));
39     }
40     return 0;
41 }

hdu 3555 bomb

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555

题意:找出1-N中出现49的数字个数。

思路:和上题差不多,如果前几位出现4,则这位不能出现9。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int T;
 4 int num[30];
 5 long long dp[30][2];
 6 long long dfs(int cur, int state, int limit)
 7 {
 8     if(cur < 0) return 1;
 9     if(!limit && dp[cur][state] != -1) return dp[cur][state];
10
11     long long ret = 0;
12     int up = limit?num[cur]:9;
13     for(int i = 0; i <= up; i++)
14     {
15         if(state && i == 9) continue;
16         ret += dfs(cur-1, i == 4, limit && i == up);
17     }
18     if(!limit) dp[cur][state] = ret;
19     return ret;
20 }
21 long long slove(long long x)
22 {
23     memset(dp, -1, sizeof(dp));
24     int cnt = 0;
25     while(x)
26     {
27         num[cnt++] = x%10;
28         x /= 10;
29     }
30     return dfs(cnt-1, 0, 1);
31 }
32 long long N;
33 int main()
34 {
35   // freopen("in.txt", "r", stdin);
36   //  freopen("out.txt", "w", stdout);
37     scanf("%d", &T);
38     while(T--)
39     {
40         scanf("%lld", &N);
41         printf("%lld\n", N+1-slove(N));
42     }
43
44     return 0;
45 }

转载于:https://www.cnblogs.com/titicia/p/5233563.html

数位DP入门题 hdu 2089 hdu 3555相关推荐

  1. 数位dp入门题 洛谷P2657 [SCOI2009] windy 数

    题干 传送门 windy 定义了一种 windy 数. 题目描述 不含前导零且相邻两个数字之差至少为 2的正整数被称为 windy 数.windy 想知道,在 a 和 b 之间,包括 a 和 b ,总 ...

  2. hdu 2089 数位dp入门

    HDU 2089 题意:中文题 思路:数位dp入门题 AC代码: #include "iostream" #include "string.h" #includ ...

  3. Bomb(数位DP板题)

    题目链接:Bomb Problem Description The counter-terrorists found a time bomb in the dust. But this time th ...

  4. 数位DP 学习笔记1(数位DP入门)

    HDU 2089 不要62: 题目大意是给你一个区间,让你统计这个区间里不包含 4 和 62 的数字的个数. 最朴素的思路是: 对于每个区间 [l, r],遍历所有在区间 [l, r] 里的数字,然后 ...

  5. 数位DP入门+数位DP模板

    数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听的名字,数位的含义:一个数有个位.十位.百位.千 ...

  6. 不要62(HDU-2089)(数位DP模板题)

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

  7. 数位 DP 入门 (不要 62+windy 数)

    \[I\] 平常的做法是设 \(f_{i,j}\) 为 \(0\)~\(j \times 10^{i-1}\) 的合法个数,这里用某种神奇而快速的做法. 简化题意: 不要 \(6\ 2\) 连在一起的 ...

  8. 数位DP入门之hdu 3652 B-number

    hdu 3652 B-number Problem Description A wqb-number, or B-number for short, is a non-negative integer ...

  9. hdu_Anniversary party_(树形DP入门题)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:有N个人,N-1个人有自己的上司,每个人有一个快乐值,如果这个人参加了聚会,那么这个人的直 ...

  10. 数位DP入门笔记(1)HUD-2089

    题目: 题目理解和思路: 1.此题是给一个6位车牌号,正着不能含有连着的62,不能有4. 2.判断车牌号可能会采用dfs,因为每增加一位数就包含带4,或者形成62两种不合法情况(可以用但此代码没有用到 ...

最新文章

  1. 不明白点积的几何意义
  2. Uploadify导致Chrome频繁崩溃Crash
  3. GraphQL 学习
  4. redis事务不具有回滚机制,那么它是如何进行事务控制的
  5. 【博客征文】畅谈百度轻应用初体验
  6. Effective Java 英文 第二版 读书笔记 Item 14:In public classes,use accessor methods,not public fields...
  7. 【Elasticsearch】es keywods 类型数据 写入后查询不到
  8. VB在XP/2K 任务管理器的进程列表中隐藏当前进程
  9. a as as big rat_12句英语绕口令,你能一口气读完几句?
  10. 基于C语言的菜鸟驿站管理系统
  11. 微软internet连接服务器,微软WEBS安装攻略之建立临时 Internet 连接
  12. 黎活明写给程序员的忠告
  13. Spring Boot(四)—— Spring MVC自动配置
  14. Linux基础8-TCP的面向链接(三次四次)
  15. 电脑远程开机以及控制
  16. 电脑蓝屏,报错信息0xc000007b
  17. 设置IntelliJ IDEA生成注释时的@author
  18. Java毕设项目-医药信息管理系统
  19. 埃森哲大连java面试_埃森哲软件工程师面试经验
  20. 学术会议 Rebuttal 模板资料留存

热门文章

  1. Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net
  2. [LeetCode]41.First Missing Positive
  3. CXF开发WebService服务器端
  4. day 07总结(数字类型内置方法/字符串类型内置方法)
  5. Python虚拟环境的搭建
  6. java基础5 (一维)数组和二维数组
  7. PHP扩展迁移为PHP7扩展兼容性问题记录
  8. hdu1421 搬寝室 DP
  9. [iOS]学习笔记3(动态性)
  10. 利用DataSet、DataTable、DataView按照自定义条件过滤数据