hdu 3652 B-number

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

参考了Qiuqiqiu特别是递推中使用的加法来mod(开始我使用的是减法,很难看)下面是我的总结;
思路:
1. 和3555Bomb一样,要含有13,可知第二维要表示是否含13,首位是否为3以及已经含13三种,还有一个就是整除问题;拓展一维来表示余数,其余的一样操作;当最高位为0时,表示所有小于n位数的数符合的情况,所以在高位相同,且高位中已经含有 ‘13’时直接加不含 ‘13’的个数即可;
2. **当第i位为1时,由求的是小于n的所有符合数可知在模拟第i位时只会模拟到0,那么加的只是f[i-1][2][]的所有符合的情况;那这个1一定要浪费吗?当你是取i-1位从0~9时,答案是的。但是当只要存在13时(整除在三维中模拟),还要看后一位是否大于3….(特别的地方);

#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int (i) = 0;i < (n);i++)
int f[15][3][13];
int bit[12];
void init()
{memset(f,0,sizeof(f));bit[1] = 1;for(int i = 2;i < 11;i++) bit[i] = bit[i-1]*10%13;f[0][0][0] = 1;for(int i = 0;i <= 10;i++)for(int k = 0;k < 13;k++){//直接按照需要的数来递推for(int j = 0;j <= 9;j++)f[i+1][0][(k+j*bit[i+1])%13] += f[i][0][k];f[i+1][0][(k+bit[i+1])%13] -= f[i][1][k];f[i+1][1][(k+bit[i+1]*3)%13] += f[i][0][k];//指定来加~~;f[i+1][2][(k+bit[i+1])%13] += f[i][1][k];for(int j = 0;j <= 9;j++)f[i+1][2][(k+bit[i+1]*j)%13] += f[i][2][k];}
}
int query(int n)
{int d[15]={},tot = 0;while(n){d[++tot] = n % 10;n /= 10;}int ans = 0,mod = 0,flag = 0;for(int i = tot;i > 0;mod = (mod + d[i]*bit[i])%13,i--){for(int j = 0;j < d[i];j++)ans += f[i-1][2][(13 - (mod + j*bit[i])%13)%13];if(flag){for(int k = 0;k < d[i];k++){ans += f[i-1][0][(13 - (mod + k * bit[i])%13)%13];}continue;}if(d[i] > 1) ans += f[i-1][1][(13 - (mod + bit[i])%13)%13];if(d[i+1] == 1 && d[i] > 3) ans += f[i][1][(13-mod)%13];if(d[i+1] == 1 && d[i] == 3) flag = 1;}return ans;
}
int main()
{init();int n;while(scanf("%d",&n) == 1){printf("%d\n",query(n+1));}
}

View Code

 

转载于:https://www.cnblogs.com/hxer/p/5185133.html

数位DP入门之hdu 3652 B-number相关推荐

  1. hdu 2089 数位dp入门

    HDU 2089 题意:中文题 思路:数位dp入门题 AC代码: #include "iostream" #include "string.h" #includ ...

  2. 数位dp入门题 洛谷P2657 [SCOI2009] windy 数

    题干 传送门 windy 定义了一种 windy 数. 题目描述 不含前导零且相邻两个数字之差至少为 2的正整数被称为 windy 数.windy 想知道,在 a 和 b 之间,包括 a 和 b ,总 ...

  3. 数位DP入门+数位DP模板

    数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听的名字,数位的含义:一个数有个位.十位.百位.千 ...

  4. 数位DP 学习笔记1(数位DP入门)

    HDU 2089 不要62: 题目大意是给你一个区间,让你统计这个区间里不包含 4 和 62 的数字的个数. 最朴素的思路是: 对于每个区间 [l, r],遍历所有在区间 [l, r] 里的数字,然后 ...

  5. 数位 DP 入门 (不要 62+windy 数)

    \[I\] 平常的做法是设 \(f_{i,j}\) 为 \(0\)~\(j \times 10^{i-1}\) 的合法个数,这里用某种神奇而快速的做法. 简化题意: 不要 \(6\ 2\) 连在一起的 ...

  6. P2657 [SCOI2009]windy数 数位dp入门

    参考了题解,理解仍然还不够透彻 #include<bits/stdc++.h> using namespace std; const int N=550; const int maxn=1 ...

  7. 牛客网 G-送分了 QAQ 数位 dp入门

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 链接: https://www.nowcode ...

  8. 数位DP入门笔记(1)HUD-2089

    题目: 题目理解和思路: 1.此题是给一个6位车牌号,正着不能含有连着的62,不能有4. 2.判断车牌号可能会采用dfs,因为每增加一位数就包含带4,或者形成62两种不合法情况(可以用但此代码没有用到 ...

  9. hdu 2089 不要62【数位dp】

    HDU 2089 求给定区间内不含62和4的数的个数. 数位dp入门.从这里我清楚了一些数位dp的用法.比如limit是判断是否达到上界,而且需要判断(!limit)..比如若题目要求不含11的个数, ...

最新文章

  1. JS的IE和Firefox兼容性汇编(原作:hotman_x)- -
  2. HFSS安装提示failed to check out license during initialization,怎么解决?
  3. 老王有两个孩子,已知至少有一个孩子是在星期二出生的男孩。问:两个孩子都是男孩的概率是多大?
  4. 电大计算机组成原理ppt,四川电大计算机组成原理(0023)第二次形考作业(课程号:5110023).docx...
  5. mysql查询语句出现sending data耗时解决
  6. DATE_FORMAT函数用法
  7. 电动汽车巨作|新能源汽车简史:电动汽车沉浮录
  8. 前端进阶-ES6函数
  9. EFR32MG裸机工程-4-UART
  10. 最全面的WordPress建站教程,零基础30分钟学会建站
  11. python医药数据分析_Python数据分析案例-药品数据分析案例
  12. ffmpeg sws_scale函数的用法
  13. 遮月夜(2018.6.26)
  14. 北大核心+CSCD期刊《电光与控制》投稿经验分享,2023年4月最新
  15. C# + Ext.Net打印
  16. pandas学习笔记(四)
  17. marvell FDB - MAC地址表
  18. 关于文件乱码解决方法(英文正常,而中午错误)
  19. Linux系统Ubuntu 20.04 ,cuda=11.1。实现C3D代码环境。
  20. 星际开图挂_星际的打开全图的秘籍是多少

热门文章

  1. [转载]网页栅格系统研究(3):粒度问题
  2. Flutter CupertinoSliverRefreshControl 苹果风格的刷新效果
  3. Android 自定义ImageView加载图片
  4. jQuery源码解析(3)—— ready加载、queue队列
  5. Python中布尔值是False的所有值
  6. 【转载】这次拆库 应是微服务化的拆分方式
  7. pointer-events:none
  8. 系统hosts文件的作用
  9. [delphi]极域学生端解除键盘鼠标锁定退出全屏广播-强制窗口化-源代码
  10. 数据库中的数据类型和c#的数据类型的映射表(转)