Problem Description
A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- string "13" and can be divided by 13. For example, 130 and 2613 are wqb-numbers, but 143 and 2639 are not. Your task is to calculate how many wqb-numbers from 1 to n for a given integer n.
 
Input
Process till EOF. In each line, there is one positive integer n(1 <= n <= 1000000000).
 
Output
Print each answer in a single line.
 
Sample Input
13 100 200 1000
 
Sample Output
1
1
2
2
 
 
题意:给你一个数n,找出1~n之间有几个数能被13整除而且含有13。
 
dp[len][mod][have],len表示当前的位数,mod表示上一位mod 13 的余数,have = 1表示前一位取1,have = 2表示出现过“13”。
思路就是记忆化搜索设置参数flag表示接下来的数是否一定比给的数小。
 
 
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
ll dp[30][20][3];
ll a[30];
ll dfs(int len , int mod , int have , int flag) {
if(len == 0) {
return have == 2 && mod == 0;
}
if(!flag && dp[len][mod][have] != -1) {
return dp[len][mod][have];
}
int t = flag ? a[len] : 9;
ll sum = 0;
for(int i = 0 ; i <= t ; i++) {
if(have == 0 && i == 1) {
sum += dfs(len - 1 , (mod * 10 + i) % 13 , 1 , flag && i == t);
}
else if(have == 1 && i == 3) {
sum += dfs(len - 1 , (mod * 10 + i) % 13 , 2 , flag && i == t);
}
else if(have == 1 && i != 1) {
sum += dfs(len - 1 , (mod * 10 + i) % 13 , 0 , flag && i == t);
}
else {
sum += dfs(len - 1 , (mod * 10 + i) % 13 , have , flag && i == t);
}
}
if(!flag)
dp[len][mod][have] = sum;
return sum;
}
ll Get(ll x) {
ll gg = x;
memset(dp , -1 , sizeof(dp));
memset(a , 0 , sizeof(a));
int len = 0;
while(gg) {
a[++len] = gg % 10;
gg /= 10;
}
return dfs(len , 0 , 0 , 1);
}
int main()
{
ll n;
while(cin >> n){
cout << Get(n) << endl;
}
return 0;
}

HDU3652:B-number(数位DP)的更多相关文章

  1. 多校5 HDU5787 K-wolf Number 数位DP

    // 多校5 HDU5787 K-wolf Number 数位DP // dp[pos][a][b][c][d][f] 当前在pos,前四个数分别是a b c d // f 用作标记,当现在枚举的数小 ...

  2. hdu 5898 odd-even number 数位DP

    传送门:hdu 5898 odd-even number 思路:数位DP,套着数位DP的模板搞一发就可以了不过要注意前导0的处理,dp[pos][pre][status][ze] pos:当前处理的位 ...

  3. codeforces Hill Number 数位dp

    http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits:  5000 MS   Memory Limits: ...

  4. HDU 5787 K-wolf Number 数位DP

    K-wolf Number Problem Description   Alice thinks an integer x is a K-wolf number, if every K adjacen ...

  5. Fzu2109 Mountain Number 数位dp

    Accept: 189    Submit: 461Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description One ...

  6. HDU 3709 Balanced Number (数位DP)

    Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

  7. beautiful number 数位DP codeforces 55D

    题目链接: http://codeforces.com/problemset/problem/55/D 数位DP 题目描述: 一个数能被它每位上的数字整除(0除外),那么它就是beautiful nu ...

  8. FZU - 2109 Mountain Number 数位dp

    Mountain Number One integer number x is called "Mountain Number" if: (1) x>0 and x is a ...

  9. BNU 13024 . Fi Binary Number 数位dp/fibonacci数列

    B. Fi Binary Number     A Fi-binary number is a number that contains only 0 and 1. It does not conta ...

  10. hdu 5898 odd-even number(数位dp)

    Problem Description For a number,if the length of continuous odd digits is even and the length of co ...

随机推荐

  1. 【Android】java.lang.StackOverflowError: stack size 8MB

    最近遇到的问题,报了两个错误,如下: java.lang.StackOverflowError: stack size 8MB android.os.TransactionTooLargeExcept ...

  2. python3 实现多域名批量访问特定目录(一)

    渗透测试之批量处理同一框架CMS系统漏洞 当我们做多网站的渗透测试时,会发现很多站点采用的都是同类型的CMS框架,只要我们发现一个漏洞,那么我们可以批量处理这一类站点,高效测试,如果不知道该站点的框架 ...

  3. Java 设计模式 – Observer 观察者模式

    目录 [隐藏] 1 代码 1.1 观察者接口: 1.2 被观察者: 1.3 观众类 : 1.4 电影类: 1.5 效果如下: 代码 说明都在注释: 观察者接口: package ObserverMod ...

  4. 【POJ - 2431】Expedition(优先队列)

    Expedition 直接中文 Descriptions 一群奶牛抓起一辆卡车,冒险进入丛林深处的探险队.作为相当差的司机,不幸的是,奶牛设法跑过一块岩石并刺破卡车的油箱.卡车现在每运行一个单位的距离 ...

  5. 微信分享(移动web端)

    create-at 2019-02-16 引入微信JS-SDK http://res.wx.qq.com/open/js/jweixin-1.4.0.js (当前最新版本) js 相关代码 (移动端实 ...

  6. 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和

    只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ...

  7. 01 Python网络爬虫简介

    什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后去互联网上爬取/获取数据的过程. 爬虫的分类 - 通用爬虫:就是爬取互联网中的一整张页面内容. - 聚焦爬虫:根据指定的需求爬取页面中指定的局部内容 ...

  8. csdn论坛页抓取

    抓取csdn论坛 实现功能 获取论坛分类所有链接,并拼接成推荐精华页的完成的链接 获取推荐精华页的帖子状态,赏分,帖子标题,作者,发布时间,回复量,查看量,最后发表时间 置顶内容不爬取,只打印置顶内容 ...

  9. 消息中间件——RabbitMQ(六)理解Exchange交换机核心概念!

    前言 来了解RabbitMQ一个重要的概念:Exchange交换机 1. Exchange概念 Exchange:接收消息,并根据路由键转发消息所绑定的队列. 蓝色框:客户端发送消息至交换机,通过路由 ...

  10. ZooKeeper 相关概念以及使用小结

    Dubbo 通过注册中心在分布式环境中实现服务的注册与发现,而注册中心通常采用 ZooKeeper,研究注册中心相关源码绕不开 ZooKeeper,所以学习了 ZooKeeper 的基本概念以及相关 ...