题意:

找出区间[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. 【Web】HTML入门小结

    文章目录 HTML? HTML 初识元素/标签 HTML语义化标签 标题 段落 font HTMl链接 HTML图像 HTML列表 HTML div HTML 块级元素与行内元素 HTML常用带格式作 ...

  2. 【Oracle】userenv()函数介绍分析

    说到这个userenv()使用起来还是很有用的 参数   功能 CLINET_INFO                                      返回最高可达64个字节存储的用户会话信 ...

  3. python sqlite3增加表字段

    给sqlite3表格增加新字段,要注意大小写,要不然不成功. 一开始这样写,不成功! 后面规范写,按大小写严格规范写! 成功了!现在查看新增加的字段commit: 仔细看,这下全部小写,括表名称.co ...

  4. JavaScript中的事件委托机制跟深浅拷贝

    今天聊下JavaScript中的事件委托跟深浅拷贝 事件委托 首先呢,介绍一下事件绑定 //方法一:通过onclick <button onclick="clickEvent()&qu ...

  5. oracle动态采样导致数据库出现大量cursor pin s wait on x等待

    生产库中,突然出现了大量的cursor pin s wait on x等待,第一反应是数据库出现了硬解析,查看最近的DDL语句,没有发现DDL.那么有可能这个sql是第一次进入 在OLTP高并发下产生 ...

  6. Percona Toolkit工具使用

    Percona Toolkit简称pt工具-PT-Tools,是Percona公司开发用于管理MySQL的工具,功能包括检查主从复制的数据一致性.检查重复索引.定位IO占用高的表文件.在线DDL等 下 ...

  7. Java 8中字符串拼接新姿势:StringJoiner

    介绍 StringJoiner是java.util包中的一个类,用于构造一个由分隔符分隔的字符序列(可选),并且可以从提供的前缀开始并以提供的后缀结尾.虽然这也可以在StringBuilder类的帮助 ...

  8. uni-app开发经验分享十七: 开发微信公众号(H5)JSSDK 的使用方式

    因为这个jssdk被uni-app坑了好多天,作者说支持1.4版本,但是我用1.4的两个分享的新方法一直不支持. 最后只能放弃了,期待什么时候能更新上. 基本的使用方法:第一步 - 下载使用方式下载地 ...

  9. 什么是Etcd,如何运维Etcd ?

    介绍 ETCD 是一个分布式.可靠的 key-value 存储的分布式系统,用于存储分布式系统中的关键数据:当然,它不仅仅用于存储,还提供配置共享及服务发现:基于Go语言实现. ETCD的特点 简单: ...

  10. kvm虚拟机管理(创建、连接)

    创建虚机.远程管理kvm虚机.virsh命令行下管理虚机..kvm通过virsh console 连入虚拟机   一.创建虚机 1)打开虚拟化管理器