http://acm.hdu.edu.cn/showproblem.php?pid=3652

题意:求数位含有13和可以被13整除的数字个数。

思路:记录3种状态:

st == 0 表示 从最高位到第 i 位既不包含 “13” 末尾也不包含 “1”。

st == 1 表示 末尾包含 “1”。

st == 2 表示 从最高位到第 i 位含有 “13”。

可以被 13 整除的话用一个参数来记录从最高位到第 i 位的和对 13 取模,当 mod == 0 && st == 2 的时候代表含有 “13” 并且可以被 13 整除。

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <iostream>
 4 #include <cstring>
 5 #include <string>
 6 #include <cmath>
 7 #include <queue>
 8 #include <vector>
 9 using namespace std;
10 #define N 505
11 #define INF 0x3f3f3f3f
12 int dp[20][20][3];
13 int  bit[20];
14
15 int dfs(int pos, int mo, int st, int limit)
16 {
17     if(pos <= 0) return st == 2 && mo == 0;
18     if(limit && ~dp[pos][mo][st]) return dp[pos][mo][st];
19     int d = limit ? 9 : bit[pos];
20     int ans = 0;
21     for(int i = 0; i <= d; i++) {
22         int ss = st;
23         int me = (mo  * 10 + i) % 13;
24         if(st != 2 && i != 1) ss = 0;
25         if(st != 2 && i == 1) ss = 1;
26         if(st == 1 && i == 3) ss = 2;
27         ans += dfs(pos - 1, me, ss, limit || i != d);
28     }
29     if(limit) dp[pos][mo][st] = ans;
30     return ans;
31 }
32
33 int solve(int num)
34 {
35     int len = 0;
36     while(num) {
37         bit[++len] = num % 10;
38         num /= 10;
39     }
40     return dfs(len, 0, 0, 0);
41 }
42
43 int main()
44 {
45     int num;
46     while(~scanf("%d", &num)) {
47         memset(dp, -1, sizeof(dp));
48         printf("%d\n", solve(num));
49     }
50     return 0;
51 }

转载于:https://www.cnblogs.com/fightfordream/p/6021561.html

HDU 3652:B-number(数位DP)相关推荐

  1. HDU 3709 Balanced Number (数位DP)

    题意 求出[x, y] 范围内的平衡数,平衡数定义为:以数中某个位为轴心,两边的数的偏移量为矩,数位权重,使得整个数平衡. 思路 外层枚举平衡点,然后数位DP即可.设计状态: dp[pos][o][l ...

  2. HDU - 3709 Balanced Number(数位dp)

    题目链接:点击查看 题目大意:将一串数字视为天平,两端平衡的数字称为平衡数,并求出一段闭区间中平衡数的个数.所谓的平衡条件即为力臂与 力相乘后两端的数量和可以抵消,例如数字4139可以视为以3为中轴的 ...

  3. HDU 5787 wolf Number 数位dp

    题意 题目就是说让我们在l到r的数字中求得有多少个连续k为不相同的数 1≤L≤R≤1e18 2≤K≤5 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  4. hdu 3652 B-number(数位DP)

    传送门 参考博文: [1]:http://www.voidcn.com/article/p-drrnjrmy-wm.html 题意: 找出区间内数中含有13的并且能被13整除的数的个数 题解: 搜了好 ...

  5. HDU odd-even number 数位dp

    题意 在l到r区间内求有多少个符合条件"当前数中所有连续的奇数长度是偶数 所有连续的偶数长度是奇数"的个数 分析 典型的数位dp问题 我们设置dp数组时可以根据 dp[pos][p ...

  6. HDU 3555 Bomb(数位DP模板啊两种形式)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Problem Description The counter-terrorists found ...

  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. Hdu 2089-不要62 数位dp

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

  9. HDU 2089 不要62 数位DP

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

  10. fzu 2109 Mountain Number 数位DP

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2109 题意: 如果一个>0的整数x,满足a[2*i+1] >= a[2*i]和a[2*i+2],则 ...

最新文章

  1. Web自动化测试 六 ----- selector选择
  2. mysql表大小限制_技术分享 | 在磁盘上查找 MySQL 表的大小
  3. Mac技巧之查看苹果电脑 Mac OS X 系统是否开启 64 位运算,以及设置 32/64 位模式的方法
  4. Docker有什么好处?
  5. Gradle实战-配置环境变量
  6. 几行代码就能实现为何要多此一举
  7. 【学习笔记】Arduino uno r3 控制led灯闪烁
  8. 聚类算法--K-Medoids(基于R的应用示例)
  9. 商用台式计算机施工方案,HP Elite 8300 商用台式电脑 - 主板说明
  10. 免费视频存储平台(微云、百度网盘、谷歌硬盘、酷播云)的截图对比
  11. 中文文本分类——商品评论情感判别
  12. 基于GitHub搭建个人网站
  13. Photoshop CS6调整界面字体大小
  14. 数据库工程师基础学习1----信息加密技术与逻辑运算
  15. 随笔:读书笔记--《CEO说像企业家一样思考》拉姆·查兰
  16. p2psearcher无法连接到KAD网络或ed2k服务器的解决办法
  17. 使用OpenCV进行图像修复、Navier-Stokes、INPAINT_TELEA,专栏:各种openCV实践的案例
  18. .bak 服务器备份文件,SQL2008 R2 如何使用SQL数据库备份文件.bak恢复数据库?
  19. 数据库内连接、左外连接、右外连接中的on、and、where条件使用
  20. 2022-2028全球与中国翻新医疗影像设备市场现状及未来发展趋势

热门文章

  1. 当你负债累累,看不到方向,众叛亲离时,该如何面对?
  2. 买的首套房开发商指定的银行是5.88的利率,朋友都说利率有点高,怎样才能省点钱呢?
  3. 事业编,还有前途可谈么?
  4. 哪一瞬间让你下定决心减肥,并且坚定不移的执行,最终瘦身成功?
  5. 坐异性朋友的车时,能坐在副驾驶吗?
  6. 文化的作用与本质是什么
  7. 风投的钱都从哪里来?
  8. 有哪些类目适合刚创业的新手淘宝卖家做?
  9. sql server作业_SQL Server作业性能–报告
  10. sql server定义_在SQL Server中查看定义权限