![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数位DP
PoPoQQQ
这个作者很懒,什么都没留下…
展开
-
POJ 3208 Apocalypse Someday 二分答案+数位DP
这题应该是POJ最强大的一道数位DP了吧 正解是AC自动机 不会 还是写数位DP吧题目大意:我们令含有666的数字为不吉利数字,则可以得到一个递增数列:{an}=666,1666,2666,3666,4666,5666,6660,6661,....给定n,求an首先我们把这个问题转化成另一个问题:给定n,求1~n中有多少个数含有666解决了这个问题,把原问题二分答案即可首先原创 2014-09-16 16:33:22 · 2643 阅读 · 0 评论 -
BZOJ 3209 花神的数论题 数位DP+数论
题目大意:令Sum(i)为i在二进制下1的个数 求∏(1一道很简单的数位DP 首先我们打表打出组合数 然后利用数位DP统计出二进制下1的个数为x的数的数量 最后输出∏(1此题的坑在于这题的组合数和数位DP的结果都是指数 对指数取模不能直接取 要取Phi(p)于是我们对10000006取模 然后这题就WA了 因为10000007不是个质数!10000007=941*10627 于是我原创 2014-10-09 19:32:10 · 2138 阅读 · 0 评论 -
BZOJ 1026 SCOI2009 windy数 数位DP
题目大意:求[a,b]区间内有多少个数满足任意相邻两个位置上的数>=2首先将[a,b]分解为[1,b]-[1,a-1]然后令f[i][j]为以i开头的j位windy数有多少个然后十进制拆分即可此题有些要讨论的地方:1.小心爆int2.最后一位要单独讨论3.已经确定的数字是否不满足windy数的条件4.一开始的[0,99...99]的区间需要单独计算#includ原创 2014-10-14 12:53:16 · 1596 阅读 · 0 评论 -
BZOJ 3329 Xorequ 数位DP+矩阵乘法
题目大意:给定n,求[1,n]以内以及[1,2^n]以内有多少x满足x^3x=2xx^3x=2x等价于x^2x = 3x而3x=x+2x 且2x=x故x满足条件当且仅当x&(x故x的二进制拆分中任意两个1不相邻令f[i]为i位数中最高位为0的满足条件的数的数量g[i]为i位数中最高位为1的满足条件的数的数量则显然有f[i+1]=f[i]+g[i]g[i+1]原创 2014-12-16 19:23:14 · 1492 阅读 · 0 评论 -
BZOJ 4029 HEOI2015 定价 数位贪心
题目大意:定义一个数的荒谬程度为去掉末尾所有00后的数字数量∗2*2(若末尾为55则荒谬程度减掉11),求[l,r][l,r]区间内荒谬程度最小的数字(若多个相同取最小) 从高位往低位贪心即可。 注意500的荒谬程度比100低#include <assert.h>#include <cstdio>#include <cstring>#include <iostream>#include原创 2015-04-29 11:07:08 · 1773 阅读 · 0 评论 -
BZOJ 1833 ZJOI2010 count 数字计数 数位DP
题目大意:求[a,b]间所有的整数中0~9每个数字出现了几次令f[i]为i位数(算前导零)中每个数出现的次数(一定是相同的,所以只记录一个就行了)有f[i]=f[i-1]*10+10^(i-1)然后照例十进制拆分其中计算[0,999...9]的时候要从1~9枚举最高位,然后其余位调用f[i-1]即可剩余部分已知位直接乘,未知位调用f[i]#include#include原创 2014-10-14 13:51:10 · 2779 阅读 · 2 评论