数位dp
C202044zxy
这个作者很懒,什么都没留下…
展开
-
CF1245F Daniel and Spring Cleaning
一、题目点此看题二、解法原创 2020-08-11 16:18:37 · 242 阅读 · 0 评论 -
CF95D Horse Races
一、题目点此看题二、解法考虑数位dpdpdp,还是用前缀相减的方式,只不过lll要单独判断。设dp[i][d][0/1]dp[i][d][0/1]dp[i][d][0/1]为跑到了第iii位,与上一个幸运数字的距离为ddd,是否有满足条件的数对,然后就是板子了。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const int M = 2005;const原创 2020-08-11 16:11:04 · 202 阅读 · 1 评论 -
CF431D Random Task
一、题目点此看题二、解法首先证明nnn越大,这样的数越多。当nnn增加111时,范围变为[n+2,2n+2][n+2,2n+2][n+2,2n+2],相比于原来[n+1,2n][n+1,2n][n+1,2n]增加了2n+1,2n+22n+1,2n+22n+1,2n+2,减少了n+1n+1n+1,而2n+22n+22n+2和n+1n+1n+1一的个数相同,所以具有单调性。然后就可以二分啦,检查就写一个二进制情况下的数位dpdpdp就行了。#include <cstdio>#includ原创 2020-08-11 14:36:29 · 157 阅读 · 0 评论 -
CF628D Magic Numbers
一、题目点此看题本题翻译有误,刚拿到这道题的同学一定要去看讨论区!二、解法能一眼看出来要写数位dpdpdp吧,偶数位奇数位比较好处理,关键是判断能被mmm整除,一个经典的讨论是转化成取模mmm等于000,设dp[i][j]dp[i][j]dp[i][j]未考虑到了第iii位,余数为rrr的方案数,最后要求余数=0=0=0即可。由于我们做了差分,注意要特判lll是不是满足要求的数。#include <cstdio>#include <cstring>#define in原创 2020-08-11 10:52:34 · 134 阅读 · 0 评论 -
CF1073E Segment Sum
一、题目点此看题二、解法很显然的数位dpdpdp,首先可以把答案转化成差分的形式(两个前缀相减)。设dp[i][s]dp[i][s]dp[i][s]为考虑到第iii位,已选的数状态为sss的方案数和方案的和(所以实现中用了pairpairpair),这里注意一下数位dpdpdp的写法,我们是需要考虑是否达到上界和前导000的,这时我们特判一下...原创 2020-08-08 19:12:07 · 221 阅读 · 0 评论 -
CF388D Fox and Perfect Sets
一、题目点此看题二、解法我们考虑用线性基表示SSS,集合SSS还需要一些线性基组合出来的,但是不在线性基内的数,我们就保证线性基的最大值在nnn以内。但是还要保证映射的唯一性,我们把线性基消除成上三角形式,就是如果一个基的最高位有值,那么其他基就必须000,举个例子(makedown\text{makedown}makedown小技巧:二级对齐\begin{alignedat}{2}\end{alignedat}):1xxx0xxx01xxx01\begin{alignedat}{2}1xxx&a原创 2020-05-14 15:23:42 · 232 阅读 · 0 评论 -
数字
一、题目点此看题二、解法显然是数位dpdpdp,设f[i][a][b][c][d]f[i][a][b][c][d]f[i][a][b][c][d]为访问到第iii位,第一个数是否顶着下界,第一个数是否顶着上界,第二个数是否顶着下节,第二个数是否顶着上界,转移的话考虑TTT的那一位,要求选的这两位或起来等于TTT的那一位,然后暴力转移。...原创 2020-04-25 12:37:23 · 387 阅读 · 1 评论 -
[TJOI2019]甲苯先生的线段树
一、题目点此看题二、解法c=1c=1c=1时,问题变成了求两个点的最长公共前缀(自己随便画个图就明白了)c=2c=2c=2时,我们先需要知道两个结论,现在分别给出结论及证明。结论111:点xxx到根的路径和为2x−cnt(x)2x-cnt(x)2x−cnt(x),其中cnt(x)cnt(x)cnt(x)是指的xxx中111的个数,你可以理解为每一个111都是一个拐点,由原先的二倍关系而多...原创 2020-03-21 11:09:29 · 195 阅读 · 0 评论 -
CF55D Beautiful numbers
一、题目点此看题二、解法首先一个数满足被一堆数整除等价于这个数满足被这一堆数的最小公倍数整除,[1,9][1,9][1,9]的最小公倍数是252025202520,且这个数有484848个因数。定义dp[i][j][k][l]dp[i][j][k][l]dp[i][j][k][l],为iii位,是否顶到上界,模252025202520的余数为kkk,现在的最小公倍数为lll(映射之后存进去...原创 2020-03-19 15:14:35 · 159 阅读 · 0 评论 -
[AHOI2009]同类分布
一、题目点此看题二、解法首先肯定想到我们要把数位和放进状态中,但是原数会有点棘手。我们可以先枚举数位和(也就是模数),设dp[i][j][k][l]dp[i][j][k][l]dp[i][j][k][l],为前iii位,是否顶到上界,数位和为kkk,余数为lll,我们最后要是k=k=k= 模数,并且l=0l=0l=0,然后就可以转移了。#include <cstdio>#i...原创 2020-03-19 10:27:09 · 121 阅读 · 0 评论 -
Balanced Numbers
一、题目点此看题二、解法很容易想到333进制状压,设dp[i][j][k]dp[i][j][k]dp[i][j][k],为还剩iii为,是否顶到上界,当前所有数位的出现情况的333进制状压(000为未出现,111为出现奇数次,222为出现偶数次),然后转移略。我在实现过程中遇到一个问题,就是怎么处理前导零,前导零是不能算进kkk中的,我想到了一个比较巧妙的方法,我们对初始化下手,如果i=n...原创 2020-03-19 10:10:40 · 151 阅读 · 0 评论 -
[SDOI2016]储能表
一、题目点此看题二、解法不要把这道题从图形的角度考虑,我们考虑它的本质就是求:∑i=0n−1∑j=0m−1max((i xor j)−k,0)\sum_{i=0}^{n-1}\sum_{j=0}^{m-1}\max((i\space xor\space j)-k,0)i=0∑n−1j=0∑m−1max((i xor j)−k,0)可以考虑数位d...原创 2020-03-08 11:23:54 · 269 阅读 · 0 评论 -
CF833C Ever-Hungry Krakozyabra
一、题目点此看题二、解法很暴力的一道题,直接数位dpdpdp应该是做不出来的。没办法了,只能暴力,如果我们去枚举生成数,本质上是这样一个方程的整数解:x0+x1...+x9=18x_0+x_1...+x_9=18x0+x1...+x9=18,情况数是C(27,9)≈4e6C(27,9)\approx 4e6C(27,9)≈4e6,啊哈哈!只有4e64e64e6,果断搜索。考虑如何检...原创 2020-02-14 10:54:31 · 791 阅读 · 0 评论 -
[SDOI2014]数数
一、题目点此看题二、解法本篇题解受这位大佬的启发,在此感谢。数据太水,但是此方法能通过hackhackhack数据,原创 2020-01-31 12:24:10 · 226 阅读 · 0 评论 -
[ZJOI2010]数字计数
一、题目点此看题二、解法这道题看上去很简单,但其实不然(很多难题都是这样)。尝试找每个数出现的次数的规律,发现瓶颈在于钱原创 2019-09-29 13:05:21 · 187 阅读 · 0 评论