数位DP入门之hdu 3652 B-number
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相关推荐
- hdu 2089 数位dp入门
HDU 2089 题意:中文题 思路:数位dp入门题 AC代码: #include "iostream" #include "string.h" #includ ...
- 数位dp入门题 洛谷P2657 [SCOI2009] windy 数
题干 传送门 windy 定义了一种 windy 数. 题目描述 不含前导零且相邻两个数字之差至少为 2的正整数被称为 windy 数.windy 想知道,在 a 和 b 之间,包括 a 和 b ,总 ...
- 数位DP入门+数位DP模板
数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听的名字,数位的含义:一个数有个位.十位.百位.千 ...
- 数位DP 学习笔记1(数位DP入门)
HDU 2089 不要62: 题目大意是给你一个区间,让你统计这个区间里不包含 4 和 62 的数字的个数. 最朴素的思路是: 对于每个区间 [l, r],遍历所有在区间 [l, r] 里的数字,然后 ...
- 数位 DP 入门 (不要 62+windy 数)
\[I\] 平常的做法是设 \(f_{i,j}\) 为 \(0\)~\(j \times 10^{i-1}\) 的合法个数,这里用某种神奇而快速的做法. 简化题意: 不要 \(6\ 2\) 连在一起的 ...
- P2657 [SCOI2009]windy数 数位dp入门
参考了题解,理解仍然还不够透彻 #include<bits/stdc++.h> using namespace std; const int N=550; const int maxn=1 ...
- 牛客网 G-送分了 QAQ 数位 dp入门
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 链接: https://www.nowcode ...
- 数位DP入门笔记(1)HUD-2089
题目: 题目理解和思路: 1.此题是给一个6位车牌号,正着不能含有连着的62,不能有4. 2.判断车牌号可能会采用dfs,因为每增加一位数就包含带4,或者形成62两种不合法情况(可以用但此代码没有用到 ...
- hdu 2089 不要62【数位dp】
HDU 2089 求给定区间内不含62和4的数的个数. 数位dp入门.从这里我清楚了一些数位dp的用法.比如limit是判断是否达到上界,而且需要判断(!limit)..比如若题目要求不含11的个数, ...
最新文章
- JS的IE和Firefox兼容性汇编(原作:hotman_x)- -
- HFSS安装提示failed to check out license during initialization,怎么解决?
- 老王有两个孩子,已知至少有一个孩子是在星期二出生的男孩。问:两个孩子都是男孩的概率是多大?
- 电大计算机组成原理ppt,四川电大计算机组成原理(0023)第二次形考作业(课程号:5110023).docx...
- mysql查询语句出现sending data耗时解决
- DATE_FORMAT函数用法
- 电动汽车巨作|新能源汽车简史:电动汽车沉浮录
- 前端进阶-ES6函数
- EFR32MG裸机工程-4-UART
- 最全面的WordPress建站教程,零基础30分钟学会建站
- python医药数据分析_Python数据分析案例-药品数据分析案例
- ffmpeg sws_scale函数的用法
- 遮月夜(2018.6.26)
- 北大核心+CSCD期刊《电光与控制》投稿经验分享,2023年4月最新
- C# + Ext.Net打印
- pandas学习笔记(四)
- marvell FDB - MAC地址表
- 关于文件乱码解决方法(英文正常,而中午错误)
- Linux系统Ubuntu 20.04 ,cuda=11.1。实现C3D代码环境。
- 星际开图挂_星际的打开全图的秘籍是多少
热门文章
- [转载]网页栅格系统研究(3):粒度问题
- Flutter CupertinoSliverRefreshControl 苹果风格的刷新效果
- Android 自定义ImageView加载图片
- jQuery源码解析(3)—— ready加载、queue队列
- Python中布尔值是False的所有值
- 【转载】这次拆库 应是微服务化的拆分方式
- pointer-events:none
- 系统hosts文件的作用
- [delphi]极域学生端解除键盘鼠标锁定退出全屏广播-强制窗口化-源代码
- 数据库中的数据类型和c#的数据类型的映射表(转)