
数位dp
Bahuia
软件工程博士
展开
-
51Nod - 1042 数位dp
题意:给出一段区间a-b,统计这个区间内0-9出现的次数。比如 10-19,1出现11次(10,11,12,13,14,15,16,17,18,19,其中11包括2个1),其余数字各出现1次。Input两个数a,b(1 Output输出共10行,分别是0-9出现的次数Input示例10 19Output示例1原创 2017-01-08 15:44:03 · 541 阅读 · 0 评论 -
hihocoder 1259 推公式+数位dp(非dfs写法)
题意:题目链接:http://hihocoder.com/problemset/problem/1259?sid=1199888 给出f(x)的定义,给出n和k,求f(1)~f(n)中模k==(0~k-1)的个数的异或和。思路:首先推公式,可以得到f(2n)=f(n)*3,f(2n+1)=f(2n)+1; 根据公式,写几个例子可以发现,对于一个数,比如5,二进制形式(101),可以发现f(5)=原创 2017-09-29 16:36:31 · 584 阅读 · 0 评论 -
HDU 6148 数位dp
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6148 中文题。思路:dp[pos][pre][flag]表示当前dp到第pos位且前一个数位上的数字是pre方案数,flag为0表示当前处于递减阶段,flag=1表示递增阶段。dp很简单,但有两点需要注意,一个是前导零的处理,另一个是对于山谷转折点的处理,因为数字可以满足相邻的相同,所以在某一位原创 2017-08-20 22:18:50 · 694 阅读 · 0 评论 -
HDU - 4734 数位dp
题意:定义F(x),若数x的十进制表示可以写成(A nA n-1A n-2 ... A 2A 1),那么F(x)定义为F(x) = An * 2^(n-1) + An-1 * 2^(n-2) + ... + A2 * 2 + A1 * 1,先给出A,B,求出0到B之间F(x)小于等于F(A)的数有多少个?思路:数位dp,可以发现最大的A也就是999999999,F(A)的最大值不超过5原创 2017-01-13 10:20:26 · 329 阅读 · 0 评论 -
51Nod - 1009 数位dp
题意:给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。Input输入N(1 Output输出包含1的个数Input示例12Output示例5思路:一道基础的数位dp原创 2017-01-02 22:03:12 · 668 阅读 · 0 评论 -
HDU - 3652 数位dp水题
题意:找到[1,n]中的满足数位上有子串13,且mod13 == 0的数字有多少个。思路:数位dp水题代码:#include #include #include #include using namespace std;typedef long long ll;int a[20];ll dp[20][15][15][2];ll dfs(int pos,原创 2017-02-14 22:16:55 · 411 阅读 · 0 评论 -
HDU - 4352 数位dp
题意:定义一个数的power值就是这个数数位上严格递增子序列的长度,找出区间 [L,R] 中 POWER == k 的数的个数。思路:好题,搜题意的时候看到了状态压缩四个字的提示,如果没有这个提示感觉应该想不到这点。很巧妙地思路,之前没有想过LIS还可以运用状压,这题的关键在于数位上的严格上升子序列最多只有10个,这是可以用状态压缩表示的。如何利用状压求解LIS,关键要深刻理解原创 2017-01-24 10:27:46 · 553 阅读 · 0 评论 -
HDU - 3709 数位dp
题意:定义一种平衡数,就是按照十进制数位上选取一位当作支点,左右两边的数位计算力矩后相等,即为平衡数。所谓力矩,就是拿数位上的数字乘上到支点的距离。举例来说,4139,如果选3作为支点,左边的力矩为4*2+1*1=9,右边的力矩为9*1=9,左边等于右边,所以4139是一个平衡数。题目要求计算出区间[x,y]之间的平衡数的个数。思路:显然数位dp。关键是在于状态的设计,这里还是欠缺不少原创 2017-01-16 09:41:40 · 424 阅读 · 0 评论 -
HDU - 4507 数位dp
题意: 什么样的数和7有关呢? 如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关―― 1、整数中某一位是7; 2、整数的每一位加起来的和是7的整数倍; 3、这个整数是7的整数倍; 现在问题来了:吉哥想知道在一定区间内和7无关的数字的平方和。 Input输入数据的第一行是case数T(1 Output请计算L原创 2017-01-10 22:27:14 · 396 阅读 · 0 评论 -
POJ - 3252 数位dp
题意:一个数x是round number,要求x写成二进制形式的时候数位上0的个数要大于等于1的个数,题目要求求出给定范围内的round number个数。思路:既然求的是二进制,那么自然要用二进制的数位dp来判断,模式基本不变,另外保存两个变量one,zero分别表示搜索中1和0出现的个数,另外还有一个flag变量清除前导零的影响。代码:#include #include原创 2017-01-13 11:48:41 · 710 阅读 · 0 评论 -
CF - 55D 数位dp + 状压
题意:求出区间[l,r]中的所有Beautiful Number的数目,如果一个数x可以被它各个数位上的非零数整除,那它就是Beautiful Number。思路:很巧妙的一道数位dp,没想出来看题解了。假设不考虑记忆化搜索,这里可以直接枚举每一位的值来进行计算,这里可以进行状压,利用cnt(1这里有个很关键的一点,需要知道如果z%y==0,那么(x%z)%y==x%y,明白这原创 2017-01-08 22:57:15 · 499 阅读 · 0 评论 -
HDU 3943 二分+数位dp
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3943 在区间[P,Q]中找到第k大的数位上还有x个4以及y个7的数。思路:二分+数位dp。代码:#include <bits/stdc++.h>using namespace std;typedef long long LL;LL p, q, x, y, k;int a[25];LL d原创 2017-09-30 08:43:12 · 538 阅读 · 0 评论