B-number HDU - 3652
题意:
找出区间[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的更多相关文章
- 数位DP入门之hdu 3652 B-number
hdu 3652 B-number Problem Description A wqb-number, or B-number for short, is a non-negative integer ...
- 【HDU 3652】 B-number (数位DP)
B-number Problem Description A wqb-number, or B-number for short, is a non-negative integer whose de ...
- Hdu 3652 B-number (同余数位DP)
题目链接: Hdu 3652 B-number 题目描述: 给出一个数n,问 [1, n]区间内有几个数能被13整除并且还有13这个子串? 解题思路: 能整除的数位DP,确定好状态随便搞搞就能过了.d ...
- hdu 3652 【数位dp】
hdu 3652 题意:求1到n中包含'13'('13'不一定连续)且能被13整除的数的个数. 这是我第一道比较了能看懂的数位dp.定义状态dp[pos][res][sta]表示处理到第pos位,模的 ...
- 线段树 逆序对 Minimum Inversion Number HDU - 1394 Laptop
Minimum Inversion Number HDU - 1394 求最小反转数,就是求最少的逆序对. 逆序对怎么求,就是先把所有的数都初始化为0,然后按照顺序放入数字,放入数字前查询从这个数往后 ...
- HDU 3652:B-number(数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3652 题意:求数位含有13和可以被13整除的数字个数. 思路:记录3种状态: st == 0 表示 从最高位到第 ...
- hdu 3652 B-number(数字dp)
http://acm.hdu.edu.cn/showproblem.php? pid=3652 大致题意:"B-number"即一个整数含有子串"13"且被13 ...
- BestCoder13 1001.Beautiful Palindrome Number(hdu 5062) 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5062 题目意思:给出 N,找出 1 - 10^N 中满足 Beautiful Palindrome N ...
- Minimum Inversion Number~hdu 1394
The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that ...
- HDU - 3652 数位DP 套路题
题意:统计能被13整除和含有13的数的个数 解法没法好说的..学了前面两道直接啪出来了 PS.HDU深夜日常维护,没法交题,拿网上的代码随便对拍一下,输出一致 #include<bits/std ...
随机推荐
- Windows Server 2012 R2远程桌面默认端口修改
修改3389默认端口可使服务器安全性进一步提升,可以避免阻断大部分的恶意暴力密码爆破. 在开始--运行菜单里,输入regedit 或者: 远程登陆服务器选择系统桌面中的"Windows Po ...
- 5.2 Spring5源码--Spring AOP源码分析二
目标: 1. 什么是AOP, 什么是AspectJ 2. 什么是Spring AOP 3. Spring AOP注解版实现原理 4. Spring AOP切面原理解析 一. 认识AOP及其使用 详见博 ...
- 利用iptables防火墙保护web服务器
实例:利用iptables防火墙保护web服务器 防火墙--->路由器-->交换机-->pc机 配置之前,清空下已有的规则,放在规则冲突不生效 工作中,先放行端口写完规则,再DROP ...
- BAPI_PO_CHANGE
这两天用BAPI更改采购订单,遇到了一些问题,最后调试解决了.记录如下吧.要修改的是采购订单的物料号和批次,在网上看到其它人写过关于 BAPI_PO_CHANGE的用法,但是具体问题还要具体分析啊. ...
- django使用缓存之drf-extensions
使用方法:1.直接添加装饰器@cache_response该装饰器装饰的方法有两个要求: 它必须是继承了rest_framework.views.APIView的类的方法 它必须返回rest_fram ...
- 【ELK】elastalert 日志告警
一.环境 系统:centos7 elk 版本:7.6.2 1.1 ElastAlert 工作原理 周期性的查询Elastsearch并且将数据传递给规则类型,规则类型定义了需要查询哪些数据. 当一个规 ...
- 相对论中的光速c不变,这么讲!你总能理解了吧!
今天谈谈相对论的假设基础--光速不变,很多人都知道爱因斯坦的相对论,也知道相对论的理论基础是光速不变,即无论参考哪个参照系,光的速度都是不变的,这个很难得理解的问题.我之前看过别人的理解,也自己思考怎 ...
- ubuntu安装mysql5.6
安装mysql5.6在ubuntu上安装mysql5.6的版本 1.添加mysql5.6的源 sudo apt-get install software-properties-common sudo ...
- flume agent的内部原理
flume agent 内部原理 1.Source采集数据,EventBuilder.withBody(body)将数据封装成Event对象,source.getChannelProcessor( ...
- There are only two hard things in Computer Science: cache invalidation and naming things.
TwoHardThings https://martinfowler.com/bliki/TwoHardThings.html https://github.com/cch123/golang-not ...