数位dp
数位dp
gongyuandaye
不要再问我会不会写可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP了。
展开
-
2020牛客多校六 H. Harmony Pairs (数位dp)
题意:求1<=A<=B<=N,满足S(A)>S(B)的(A, B)对数,S是数位和。 题解:数位dp 看范围,数位dp。 dp[pos][d][f0][f1]dp[pos][d][f0][f1]dp[pos][d][f0][f1]:表示dfs到当前pos,之前的位数差为d,B与N的关系为f0,A与B的关系为f1。具体见注释。 接着裸的数位dp。差可能为负,d右移1000即可。 #define _CRT_SECURE_NO_WARNINGS #include<iostream&原创 2020-07-27 23:40:09 · 401 阅读 · 0 评论 -
CodeForces 55D Beautiful numbers (数位dp+离散化)
题意:求区间中能被每个数位上的数整除的数的数量。 题解:数位dp 考虑直接的做法,既然能被每一位整除,即可以被lcm整除,递归每一位并记忆化,判断最终的数是否满足,但dp显然不能保存这么大的数,所以要进行取模。 根据X % a = [ X % ( b * a ) ] % a,显然模数mod = lcm(1,2,3,···,8,9) = 2520。 这样做还是会超内存,考虑离散化,用dp[][][]进行记忆的时候发现存lcm的时候浪费了很多空间,我们将mod的48个因数编号进idx[],用索引代替lcm即可。原创 2020-05-09 20:12:56 · 148 阅读 · 0 评论 -
UVA 12670 Counting ones (数位dp)
题意:求范围内每个二进制数的1的个数和。 题解:数位dp dp[i]dp[i]dp[i]:小于 只有第i+i+i+1位为1的二进制数 的所有数1的和。 c[i]c[i]c[i]:第iii位为1的数量。 对于1000,答案就是dp[3] = 2 * dp[2]+ c[2],即第iii位是否为1两种情况加上第iii位为1的数量。 考虑普遍情况,对于每一位上的1,还要考虑之前的1是否存在。 如100 100 100,对于第3个1,还要考虑100 000 100 和 100 100 100 两种情况。 看代码就明白原创 2020-05-09 15:36:31 · 202 阅读 · 0 评论 -
HDU 4733 F(x) (数位dp)
题意:F(x) = An * 2n-1 + An-1 * 2n-2 + … + A2 * 2 + A1 * 1,Ai是十进制数位,然后给出a,b求区间[0,b]内满足F(i)<=F(a)的i的个数 题解:数位dp dp[pos][sta]dp[pos][sta]dp[pos][sta]:当前哪一位,之后的和为sta的数量。 #define _CRT_SECURE_NO_WARNINGS #i...原创 2020-05-07 16:10:23 · 120 阅读 · 0 评论 -
POJ 3252 Round Numbers (数位dp)
题意:区间中有多少个数的二进制数的0数量大于等于1数量。 题解:数位dp dp[pos][sta]dp[pos][sta]dp[pos][sta]:当前哪一位,(0数量 - 1数量)为sta的之后有多少个数。 把sta往右移32,避免负数的情况。 用lead记录是否具有前导0。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #in...原创 2020-05-07 15:25:48 · 112 阅读 · 0 评论 -
HDU 2089 不要62 (数位dp)
题意:求区间中不含连续的62和4的数。 题解:数位dp 直接dfs不记忆化也能过。 dp[pos][sta]dp[pos][sta]dp[pos][sta]:记录当前哪一位,前导是否为6的之后的种数。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string&...原创 2020-05-07 14:30:53 · 124 阅读 · 0 评论