题目链接

求出1-n中包含13并且能被13整除的数的个数

开一个四维数组dp[i][j][k][l], i表示第i位, j表示这个数mod13, k表示是否包含13, l表示前一位是什么。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define pb(x) push_back(x)
 4 #define ll long long
 5 #define mk(x, y) make_pair(x, y)
 6 #define lson l, m, rt<<1
 7 #define mem(a) memset(a, 0, sizeof(a))
 8 #define rson m+1, r, rt<<1|1
 9 #define mem1(a) memset(a, -1, sizeof(a))
10 #define mem2(a) memset(a, 0x3f, sizeof(a))
11 #define rep(i, a, n) for(int i = a; i<n; i++)
12 #define ull unsigned long long
13 typedef pair<int, int> pll;
14 const double PI = acos(-1.0);
15 const double eps = 1e-8;
16 const int mod = 1e9+7;
17 const int inf = 1061109567;
18 const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
19 int dp[20][30][2][10], digit[20];
20 int dfs(int len, int num, int pre, bool ok, bool fp) {
21     if(!len) {
22         return ok&&num==0;
23     }
24     if(!fp&&dp[len][num][ok][pre]!=-1)
25         return dp[len][num][ok][pre];
26     int maxx = fp?digit[len]:9, ret = 0;
27     for(int i = 0; i<=maxx; i++) {
28         ret += dfs(len-1, (num*10+i)%13, i, ok||(pre==1&&i==3), fp&&i==maxx);
29     }
30     if(!fp)
31         return dp[len][num][ok][pre] = ret;
32     return ret;
33 }
34 int cal(int n) {
35     int len = 0;
36     while(n) {
37         digit[++len] = n%10;
38         n/=10;
39     }
40     return dfs(len, 0, 0, 0, 1);
41 }
42 int main()
43 {
44     int a;
45     mem1(dp);
46     while(scanf("%d", &a)!=EOF) {
47         printf("%d\n", cal(a));
48     }
49 }

转载于:https://www.cnblogs.com/yohaha/p/5036392.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. 新消费风口再“热闹”,红利依然握在伊利、康师傅们手里
  2. 【Python基础】Pandas三种实现数据透视表的方法
  3. CUDA ERROR: device-side assert triggered at解决
  4. python docx 设置字体_python docx 中文字体设置的操作方法
  5. 简单谈谈Server2008的NAP到底是什么
  6. LeetCode 848. 字母移位(前缀和+取模)
  7. iphone型号表_iphone网络制格式怎么看,如何看两网三网、美版、欧版和国行信号到底有么有区别...
  8. Andrew Stankevich#39;s Contest (1)
  9. hdu 1247 map
  10. 如何进行大数据分析及处理(总结)
  11. netty 5 心跳
  12. spring boot 中调用存储过程失败问题
  13. XML解析——Java中XML的四种解析方式
  14. 秒杀各大网盘的不限速大文件传输工具
  15. content=IE=Edge
  16. 《Caffe Modle Zoo》
  17. 啤酒与尿布:数据分析相关性分析案例一
  18. 短视频平台开发VS直播平台开发,未来发展趋势
  19. 产品| 产品经理学习路径及职业规划
  20. ARFoundation

热门文章

  1. vue组件化通信之子向父传值
  2. React开发(147):开发注意
  3. 前端学习(3231):React中的受控组件
  4. 前端学习(3135):react-hello-react之函数的柯里化
  5. [html] 什么是空元素?常用的空元素有哪些?
  6. [jQuery] jQuery与jQuery UI有啥区别?
  7. [css] 怎么让body高度自适应屏幕?为什么?
  8. [css] 使用css实现悬浮提示文本
  9. 前端学习(2020)vue之电商管理系统电商系统之完成商品添加操作
  10. 前端学习(1989)vue之电商管理系统电商系统之渲染商品列表数据