题目:求1~n的范围里含有13且能被13整除的数字的个数。

分析:

dfs(len, num, mod, flag)
mod记录数字对13取余后的值
len表示当前位数
num==0 不含13且上一位不为1
pre==1 不含13且上一位为1
pre==2 含13
flag表示是否可以任意取值(判断范围)。
如此,记忆化搜索即可得解。

总结:我是在最后才判断是否可以%13 , 但是这是不可以的 , 经过这道题后,理解更好了 ;

这里有个式子特别重要 : 关于连加取mod ,      例如: 123%13=(100+20+3)%13 = ((1%13*10+2)%13*10+3)%13; !!!!!  这在数位dp很重要

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <vector> using namespace std; #define LL long long
#define MOD 13
LL dp[][][];
int dis[]; LL dfs(int len, int type, int mod, bool flag)
{
if(len < )
return type == && mod == ;
if(!flag && dp[len][type][mod]!=-)
return dp[len][type][mod];
int end = flag?dis[len]:;
int ans = ;
for(int i=; i<=end; i++)
{
if(type == || (type == && i == ))
ans += dfs(len-, , (mod*+i)%MOD, flag&&i==end);
else
ans += dfs(len-, i==?:, (mod*+i)%MOD, flag&&i==end);
}
if(!flag)
dp[len][type][mod] = ans;
return ans;
} LL solve(LL n)
{
int len = ;
while(n)
{
dis[len++] = n%;
n /= ;
}
return dfs(len-, , , );
} int main()
{
int n;
memset(dp, -, sizeof(dp));
while(cin>>n)
cout<<solve(n)<<endl;
return ;
}

HDU 3652 区间有13并且这样整除13 的数量(数位DP)的更多相关文章

  1. HDU3555 区间的数里面有49的个数(数位dp)

    题目:区间的数里面有49的个数 分析: dp[pos][0]:长度为pos的数中,不包含49的,前一位不为4的有多少个:dp[pos][1]:长度为pos的数中,不包含49的,前一位为4的有多少个:d ...

  2. HDU 4507 吉哥系列故事——恨7不成妻 (数位DP)

    题意: 如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关: 1.整数中某一位是7: 2.整数的每一位加起来的和是7的整数倍: 3.这个整数是7的整数倍: 给定一个区间[L,R],问在此区 ...

  3. HDU 4507 吉哥系列故事――恨7不成妻(数位DP+结构体)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4507 题目大意:如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关 1.整数中某一位是7: ...

  4. HDU - 4507 - 吉哥系列故事——恨7不成妻(数位DP,数学)

    链接: https://vjudge.net/problem/HDU-4507 题意: 单身! 依然单身! 吉哥依然单身! DS级码农吉哥依然单身! 所以,他生平最恨情人节,不管是214还是77,他都 ...

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

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

  6. 数位dp进阶(hdu2089,3652)

    之前的文章已经讲过如何求1—r中的特殊数,这篇博客就来讲些进阶操作: 直接看例题(hdu2089): (题目是中文的我就不写大意了) 这题与hdu3555最大的区别就是规定了l,不再以1开始: 解决这 ...

  7. 2017"百度之星"程序设计大赛 - 复赛1005&&HDU 6148 Valley Numer【数位dp】

    Valley Numer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  8. HDU 2089 不要62【数位DP入门题】

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

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

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

随机推荐

  1. HTML布局,插件的调用方法

  2. re.spilt

  3. iOS 打包生成ipa文件(使用终端命令打包)

    1. 打开终端 2.在终端输入cd +空格 把工程文件直接拖到终端,然后回车 3. 在终端输入xcodebuild,回车 然后你可以发现工程文件里多了一个build文件夹 在build文件夹中,有一个 ...

  4. hibernate 对象OID

    它是hibernate用于区分两个对象是否是同一个对象的标识. 我们都知道,虚拟机内存区分两个对象看的是内存的地址是否一致.数据库区分两个对象,靠的是表的主键.hibernate负责把内存中的对象持久 ...

  5. 数字图像处理实验(5):Proj03-01 ~ Proj03-06 标签: 图像处理matlab 2017-04-30 10:39 184人阅读

    PROJECT 03-01 : Image Enhancement Using Intensity Transformations 实验要求: Objective To manipulate a te ...

  6. Excel课程学习第二课单元格格式设置

    今天要讲的是单元格格式的设置,字体字号的设置,边框设置,合并单元格之类的. 下面看看具体的内容: 1.使用单元格格式工具美化表格 1.1设置单元格格式的对话框在哪里? 下图中三个小箭头都能打开设置单元 ...

  7. CodeForces 384E Propagating tree (线段树+dfs)

    题意:题意很简单么,给定n个点,m个询问的无向树(1为根),每个点的权值,有两种操作, 第一种:1 x v,表示把 x 结点加上v,然后把 x 的的子结点加上 -v,再把 x 的子结点的子结点加上 - ...

  8. 【LeetCode】将罗马数字转换成10进制数

    Roman to Integer Given a roman numeral, convert it to an integer. 首先介绍罗马数字 罗马数字共有七个,即I(1),V(5),X(10) ...

  9. Quartz.Net分布式运用

    Quartz.Net的集群部署详解 标签(空格分隔): Quartz.Net Job 最近工作上要用Job,公司的job有些不满足个人的使用,于是就想自己搞一个Job站练练手,网上看了一下,发现Qua ...

  10. docker,mysql,Navicat

    Navicat破解网址  https://www.jianshu.com/p/5f693b4c9468 docker pull mysql docker run -d -p 3306:3306 --n ...