
动态规划 - 数位dp
Crossing over
这个作者很懒,什么都没留下…
展开
-
HDU 3652 B-number
传送门 数位dp。 有一种数,能被“13”整除而且数位里包含“13”,求[1,n]中这种数的个数。 for short是简称的意思。 之前求过数位里不包含“XX”的,中途判断就可以了。但如果求的是包含的个数,要么取反、要么只能最后判断。 以下几点。 这道题要用三维状态,两个条件各用一维。这两个条件都是运行到最后一位(反正大概是最后)才能判断出来。 对包含“13”的判断,设计三个状态,分别表示:之...原创 2019-07-07 21:59:10 · 193 阅读 · 0 评论 -
HDU 3709 Balanced Number
传送门 数位dp。(这题比较牛批) 给你一个数,如果能选取这个数的某个数位作为支点(pivot),使得支点左右两边的各个数位的加权和相等(不包括支点)(权值为该数位到支点的距离),那么就称这个数为平衡数。然后问你[x,y]中有几个平衡数。 举个例子,4139是平衡数(以3为支点),20是平衡数(以2为支点)。。。 以下几点: 将题目条件转化为一个在各个数位上连续计算的公式。就像HDU 4734那...原创 2019-07-07 23:22:48 · 259 阅读 · 1 评论 -
CCF CSP 201312 4.有趣的数
数位dp。 这种题光看代码真是头疼,想了一个小时才想明白当时的思路。 思路如下: 题目问你x位有趣的数有多少个,记为c[x],那么就要想出来c[x]怎么用c[x-1]表示。 x位有趣的数一定都可以由一个x-1位的数m在末尾添加一个数字而构造出来,分为两种情况: m是有趣的数 可以想到,只能在末尾添加1或3,这两种添加方式都一定有效。 m不是有趣的数 若在m后添加一个数字能使其变为有趣的数,则m一...原创 2019-06-29 23:10:51 · 366 阅读 · 0 评论 -
HDU 2089 不要62
传送门 数位dp。 给一个左闭右闭区间,统计个数。 dp[i][j]表示当前从第i位枚举到最低位(第0位)、在j状态下符合条件的个数。 j表示第i+1位是不是6。 初识数位dp,说几点看法。 之所以要设计这么个dp数组,就是为了重复利用(记忆化搜索)。不这么干的话,每种i,j的组合都可能要被计算多次。现在只用第一次计算,然后再碰见这样的i,j组合就不用再算了。 当然,前提是不在limit模式下。...原创 2019-07-03 22:03:18 · 91 阅读 · 0 评论 -
HDU 3555 Bomb
传送门 数位dp。 给一个N,问你从[1,N]中包含49的数的个数。 主要有两点。 solve(x)求的是[0,x]中不包含49的个数(一检测到“49”就continue了) 这题要用__int64,这玩意linux还用不了,所以定义一个typedef是好习惯,方便改。 #include <cstdio> #include <iostream> #include <...原创 2019-07-03 22:19:20 · 94 阅读 · 0 评论 -
HDU 4734 F(x)
传送门 数位dp。 给一个函数F(x),然后问你对于[0,B]中的每个数x,满足F(x)<=F(A)的x的个数。 inclusive表示闭区间。 可以看出,题目定义的这个函数和每个数位相关。 所以,在对每个数位进行dfs的过程中,随着这个数一点点被确定,这个数的F(x)也逐渐被确定(而且这个过程是单调递增的,非严格)。 所以可以想到dp的第二维表示:从最高位到第i+1位的部分F(x)值。 所...原创 2019-07-03 23:01:20 · 176 阅读 · 0 评论 -
POJ 3252 Round Numbers
传送门 数位dp。 定义一种数,其二进制表示中0的个数大于等于1的个数。给你[Start,Finish],问其中多少个这种数。 说几点。 首先可以想到,这个题没办法中途continue了,只能到最后(pos==-1)才能判断。 状态可以有两种设计方法,一种是两维,分别表示前面数位中0和1的个数; 另一种是一维,表示前面数位中0多于1的个数(必须确定谁比谁多,请不要混淆为绝对值)。 可以看出,后者...原创 2019-07-04 00:47:18 · 164 阅读 · 0 评论 -
HDU 5179 beautiful number
传送门 数位dp。(要考虑前导0,类似还有POJ 3252) 定义一种数,要求在其十进制数位上,较高位都>=较低位,且较高位%较低位都是0(较高位都能被较低位整除)。问你[L,R]内有多少个这种数。 需要注意几点。 dp第二维记录第i+1位数字,整除关系可以传递。中途判断。 默认之前位都已满足要求,所以只要当前位能整除第i+1位,就可整除前面任意一位。 满足要求的数中,只有一个数可以含有0...原创 2019-07-04 18:33:34 · 187 阅读 · 0 评论