题意:

找出区间[li,ri]有多少个符合要求的数:

1、这个数里面有13

2、这个数可以被13整除

题解:

这个题目和之前的有点不一样就是这个题目要我们求包含13的(之前做过的都是不包含)。但是都差不多了,顶多就是状态开大一点就可以了

1、如果它前面已经有13了,那么状态就是2

2、如果前面没有13,且它的上一位是1,那么它的状态就是1

3、如果前面没有13,且它的上一位不是1,那么状态就是0

至于状态之间的转换就看代码吧!

然后就是还要被13取余,取余运算符是很浪费时间的,那么我们可以采用秦九韶取余

(a+b)%mod=((a%mod)+(b%mod))%mod

(a*b)%mod=((a%mod)*(b%mod))%mod

那么12%mod=((1%mod)*10+2)%mod

dp方程:

dp[x][y][z]表示:在枚举第x位,它的状态为y(这个状态就是包含13那个),递归取余的结果是z

代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 #include<iostream>
5 using namespace std;
6 const int maxn=25;
7 typedef long long ll;
8 ll v[maxn],dp[maxn][3][15],ci;
9 ll dfs(ll pos,bool limit,ll is,ll mod)
10 {
11 if(pos==-1)
12 {
13 if(is==2 && mod==0)
14 {
15 return 1;
16 }
17 return 0;
18 }
19 ll tmp=0;
20 if(!limit && dp[pos][is][mod]!=-1) return dp[pos][is][mod];
21 ll up=limit?v[pos]:9;
22 for(ll i=0; i<=up; ++i)
23 {
24 //取余时候秦九韶算法
25 ll nmod = (mod*10+i)%13;
26 ll nstatus = is; // 有点else s = statu 的意思
27 //没想到它的状态有三个,我只考虑到了高位有13和没有13.但是还要考虑他的上一位是不是1
28 //这一点一定要考虑,大家可以想一想
29 if(is==0 && i==1)//高位不含13,并且末尾不是1,现在末尾添1返回1状态
30 nstatus = 1;
31 else if(is==1 && i!=1 && i!=3)//高位不含13,且末尾是1,现在末尾添加的不是1返回0状态
32 nstatus = 0;
33 else if(is==1 && i==3)//高位不含13,且末尾是1,现在末尾添加3返回2状态
34 nstatus = 2;
35 tmp+=dfs(pos-1,limit && i==v[pos],nstatus,nmod);
36 }
37 if(!limit) dp[pos][is][mod]=tmp;
38 //只有上界为9的时候才会往dp数组里面存,因为这样能节省更多的时间
39 return tmp;
40 }
41 ll solve(ll sum)
42 {
43 ll pos=0;
44 while(sum)
45 {
46 v[pos++]=sum%10;
47 sum/=10;
48 }
49 ci=pos;
50 return dfs(pos-1,1,0,0);
51 }
52 int main()
53 {
54 ll n;
55 memset(dp,-1,sizeof(dp));
56 while(~scanf("%I64d",&n))
57 {
58
59 printf("%I64d\n",solve(n));
60 }
61 return 0;
62 }

B-number HDU - 3652的更多相关文章

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

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

  2. 【HDU 3652】 B-number (数位DP)

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

  3. Hdu 3652 B-number (同余数位DP)

    题目链接: Hdu 3652 B-number 题目描述: 给出一个数n,问 [1, n]区间内有几个数能被13整除并且还有13这个子串? 解题思路: 能整除的数位DP,确定好状态随便搞搞就能过了.d ...

  4. hdu 3652 【数位dp】

    hdu 3652 题意:求1到n中包含'13'('13'不一定连续)且能被13整除的数的个数. 这是我第一道比较了能看懂的数位dp.定义状态dp[pos][res][sta]表示处理到第pos位,模的 ...

  5. 线段树 逆序对 Minimum Inversion Number HDU - 1394 Laptop

    Minimum Inversion Number HDU - 1394 求最小反转数,就是求最少的逆序对. 逆序对怎么求,就是先把所有的数都初始化为0,然后按照顺序放入数字,放入数字前查询从这个数往后 ...

  6. HDU 3652:B-number(数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=3652 题意:求数位含有13和可以被13整除的数字个数. 思路:记录3种状态: st == 0 表示 从最高位到第 ...

  7. hdu 3652 B-number(数字dp)

    http://acm.hdu.edu.cn/showproblem.php? pid=3652 大致题意:"B-number"即一个整数含有子串"13"且被13 ...

  8. BestCoder13 1001.Beautiful Palindrome Number(hdu 5062) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5062 题目意思:给出 N,找出 1 - 10^N 中满足 Beautiful Palindrome N ...

  9. Minimum Inversion Number~hdu 1394

    The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that ...

  10. HDU - 3652 数位DP 套路题

    题意:统计能被13整除和含有13的数的个数 解法没法好说的..学了前面两道直接啪出来了 PS.HDU深夜日常维护,没法交题,拿网上的代码随便对拍一下,输出一致 #include<bits/std ...

随机推荐

  1. 【JS学习】String基础方法

    前言:本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 目录 定义: 字符串的连接: 标签模板的使用: 字符串的基本方 ...

  2. 使用Jenkins+Blue Ocean 持构建自动化部署之安卓源码打包、测试、邮件通知

    什么是BlueOcean? BlueOcean重新考虑了Jenkins的用户体验.BlueOcean由Jenkins Pipeline设计,但仍然兼容自由式工作,减少了团队成员的混乱,增加了清晰度. ...

  3. Nginx 路由转发和反向代理 location 配置

    Nginx 配置的三种方式 第一种直接替换 location 匹配部分 第二种 proxy_pass 的目标地址,默认不带 /,表示只代理域名,url 和参数部分不会变(把请求的 path 拼接到 p ...

  4. 【Spring】 Spring的核心容器

    Spring的核心容器 文章目录 Spring的核心容器 BeanFactory ApplicationContext 1.通过ClassPathXmlApplicationContext创建 2.通 ...

  5. 【Java】计算机软件、博客的重要性、编程语言介绍和发展史

    之前学得不踏实,重新复习一遍,打扎实基础中. 记录 Java核心技术-宋红康_2019版 & Java零基础学习-秦疆 文章目录 软件开发介绍 软件开发 什么是计算机? 硬件及冯诺依曼结构 计 ...

  6. CS远控

    Cobaltstrike 一.基础使用 ./teamserver 192.168.43.224 123456 启动服务器端 在windows下的链接 双击bat文件即可 在linux下 ./start ...

  7. Spring学习03

    6.Bean的自动装配 6.1 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean的三种装配机 ...

  8. HTML5与CSS3知识点总结

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star 原文链接:https://blog.csdn.net/we ...

  9. 并发编程常用工具类(二) SymaPhore实现线程池

    1.symaPhore简介 symaphore(信号量)用来控制同时访问某个资源的线程数量,一般用在并发流量控制.个人对它的理解相当于是接待室每次只能接待固定数量的人,当达到最高接待数的时候,其他人就 ...

  10. Windows和Linux下apache-artemis-2.10.0安装配置

     window下安装配置 一.官网下载 http://activemq.apache.org/artemis/download.html 二.百度网盘下载 链接:https://pan.baidu.c ...