【bzoj5064】B-number 数位dp
题目描述
输入
输出
样例输入
13
样例输出
1
题解
数位dp
由于要求被13整除,因此要记录对13的模数。
由于要包含字符串"13",因此要记录是否出现过字符串"13",同时还要记录首位是什么以便转移。
于是设 $f[i][j][k][0/1]$ 表示 $i$ 位数,对13取模的结果为 $j$ ,首位为 $k$ ,是否包含字符串"13"的数的个数。
直接预处理出 $f$ 数组以及 $10^k$ ,然后数位dp求解即可。
首先算出不满总位数的答案,然后考虑满位数的,那么如果dp的当前位小于原数的当前位则直接计算答案,否则留到下一步处理。这里最好把所求区间转化为 $[1,n+1)$ 的半开半闭区间来求。
细节还算比较少的啦
#include <cstdio>
typedef long long ll;
ll b[17] , f[17][13][10][2];
int main()
{int i , j , k , l , m , di = 1 , flag = 0;ll n , now = 0 , ans = 0;b[0] = f[0][0][0][0] = 1;for(i = 1 ; i <= 16 ; i ++ ){b[i] = b[i - 1] * 10;for(j = 0 ; j < 13 ; j ++ )for(k = 0 ; k < 10 ; k ++ )for(l = 0 ; l < 10 ; l ++ )for(m = 0 ; m < 2 ; m ++ )f[i][(j + k * b[i - 1]) % 13][k][m || (k == 1 && l == 3)] += f[i - 1][j][l][m];}scanf("%lld" , &n) , n ++ ;for(i = 1 ; b[i] <= n ; i ++ )for(j = 1 ; j < 10 ; j ++ )ans += f[i][0][j][1];for( ; i ; i -- ){for(j = di ; j < n / b[i - 1] % 10 ; j ++ )ans += f[i][(13 - now * b[i] % 13) % 13][j][1] + (flag || (n / b[i] % 10 == 1 && j == 3)) * f[i][(13 - now * b[i] % 13) % 13][j][0];now = (now * 10 + n / b[i - 1] % 10) % 13 , di = 0;if(n / b[i] % 10 == 1 && n / b[i - 1] % 10 == 3) flag = 1;}printf("%lld\n" , ans);return 0;
}
转载于:https://www.cnblogs.com/GXZlegend/p/7808062.html
【bzoj5064】B-number 数位dp相关推荐
- HDU 3709 Balanced Number (数位DP)
题意 求出[x, y] 范围内的平衡数,平衡数定义为:以数中某个位为轴心,两边的数的偏移量为矩,数位权重,使得整个数平衡. 思路 外层枚举平衡点,然后数位DP即可.设计状态: dp[pos][o][l ...
- fzu 2109 Mountain Number 数位DP
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2109 题意: 如果一个>0的整数x,满足a[2*i+1] >= a[2*i]和a[2*i+2],则 ...
- HDU - 3709 Balanced Number(数位dp)
题目链接:点击查看 题目大意:将一串数字视为天平,两端平衡的数字称为平衡数,并求出一段闭区间中平衡数的个数.所谓的平衡条件即为力臂与 力相乘后两端的数量和可以抵消,例如数字4139可以视为以3为中轴的 ...
- HDU odd-even number 数位dp
题意 在l到r区间内求有多少个符合条件"当前数中所有连续的奇数长度是偶数 所有连续的偶数长度是奇数"的个数 分析 典型的数位dp问题 我们设置dp数组时可以根据 dp[pos][p ...
- HDU 5787 wolf Number 数位dp
题意 题目就是说让我们在l到r的数字中求得有多少个连续k为不相同的数 1≤L≤R≤1e18 2≤K≤5 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...
- CodeForces - 1560F2 Nearest Beautiful Number (hard version)(二分+数位dp)
题目链接:点击查看 题目大意:给出一个十进制数字 nnn 和一个约束 kkk,问大于等于 nnn 且满足不同的数位个数小于等于 kkk 的最小的数字是多少 题目分析:自己写的贪心太丑了,就不放上来丢人 ...
- Mountain Number FZU-2109数位dp
Mountain NumberFZU-2109 题目大意:一个大于0的数字x,分写成x=a[0]a[1]a[2][3]..a[n]的形式,(比如x=1234,a[0]=1,a[1]=2,a[3]=3, ...
- HDU-5197-beautiful number(数位DP)
beautiful number Problem Description Let A=∑i~n=ai∗10n−i(1≤ai≤9)(n is the number of A's digits). We ...
- [POJ3252]Round Number(数位dp)
题目链接:http://poj.org/problem?id=3252 题意:求范围内数字二进制下0的个数大于等于1的个数的数的个数. 数位dp,dp(l,zero,one,fz)记录当前第l位时0的 ...
最新文章
- 学习笔记之xss原理篇
- 一次搞定:分布式缓存 Redis 集群搭建!
- 任意进制转换简单理解
- maven 私服的使用及settings.xml的配置
- 百度优化有感,原创内容只是个传说
- 学习日报 1028 分支结构 if分支语句
- 2016年3-8,哦,好日子
- python 调用gpu算力_数据科学家需要算力,GPU 如何实现?-控制器/处理器-与非网...
- 向集合中添加Person类型并对其排序
- 0031-如何在CDH启用Kerberos的情况下安装及使用Sentry(一)
- vue2.0一起在懵逼的海洋里越陷越深(二)
- Atitit nosql的艺术 attilax著作 目录 1. 1.5NoSQL数据库的类型	1 1.1. 1.5.1键值(Key/Value)存储	1 1.2. 1.5.2面向文档的数据库	1 1
- 4-5. do...while循环
- 什么是数据分层,数据分层的作用!
- vxworks下gmac调试的总结
- 鼠标点击特效(富强,民主,文明,和谐,诚信,友善)
- 洛谷 P1710 地铁涨价 (dfs+bfs)
- BZOJ 2140: 稳定婚姻 Tarjan Map
- 【营销获客二】如何用企业微信搭建私域流量营销平台
- python图灵_python图灵机器人