题意:

找出区间[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. [CPP] 智能指针

    介绍 C++ 的智能指针 (Smart Pointers) 相关 API. C++ 中的智能指针是为了解决内存泄漏.重复释放等问题而提出的,它基于 RAII (Resource Acquisition ...

  2. 【转】自定义ALV控件的工具条按钮

    1 CLASS lcl_event_receiver DEFINITION DEFERRED. 2 3 DATA: itab TYPE TABLE OF spfli, 4 wa TYPE spfli. ...

  3. the7主题 一个强大的wordpress 主题 html5拖拽式建站系统

    演示地址 http://the7.net The7汉化主题.可视化编辑器和终极交互式模块插件完全无缝集成,可以让你完全自由的布局或者创意实现你的网站,真正的建站仿站利器. The7的750+个主题设置 ...

  4. 在HTML中改变input标签中的内容

    在HTML中改变input标签的内容 1.使用js自带的方法: document.getElementById('roadName').value='武汉路';//通过标签选择器来选择标签,然后设置值 ...

  5. uni-app开发经验分享五: 解决三端页面兼容问题的方法

    在做uni-app开发的过程中,我们最头疼可能不是开发的过程中的逻辑,而是最后要做的三端兼容测试和修改,在我开发的项目中,这一步都是最头疼和令人头秃的过程,这里总结一些个人开发遇到的问题,希望对大家有 ...

  6. 论super().__init__()的用法

    当我们调用 super() 的时候,实际上是实例化了一个 super 类. super 是个类,既不是关键字也不是函数等其他数据结构,该对象就是专门用来访问父类中的属性的(严格按照继承的关系). -- ...

  7. CentOS7 通过snat进行上网

    需求: 有两台服务器,一台绑定了弹性公网IP,另外一台没有,需要内网服务器通过有弹性ip的机器代理进行上网. 环境: centos7 操作系统 服务器A: 192.168.0.18 (可以上网,有弹性 ...

  8. Nifi组件脚本开发—ExecuteScript 使用指南(一)

    Part 1 - 介绍 NiFi API 和 FlowFiles ExecuteScript 是一个万能的处理器,允许用户使用编程语言定义自己的数据处理功能, 在每一次 ExecuteScript p ...

  9. 01. struts2介绍

    struts2优点 与Servlet API 耦合性低.无侵入式设计 提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能 支持多种表现层技术,如:JSP.freeMarker.veloc ...

  10. java虚拟机入门(三)- 你了解对象吗

    对象对于java程序员来说,那是想要多少就有多少,所以那些嘲笑程序员的单身狗,哼,只有无知使你们快乐,想我大java开发,何曾缺少过对象.我们不仅仅知道创建对象,还知道创建对象的过程是啥样的,不信?往 ...