- 博客(221)
- 收藏
- 关注
原创 [LibreOJ - 2150] 最大子矩阵 (dp)
[LibreOJ - 2150] 最大子矩阵题目链接大致题意:在n∗mn*mn∗m的矩阵中,选出kkk个子矩阵,使得这kkk个子矩阵分值之和最大(选出的kkk个子矩阵不能相互重叠)解题思路:mmm的取值只有1或者2,分情况讨论当mmm等于1时预处理出第一列的前缀和,用sum1sum1sum1表示状态表示:f[i][j]表示到第i行取了j个矩阵的最大值f[i][j]表示到第i行取了j个矩阵的最大值f[i][j]表示到第i行取了j个矩阵的最大值转移方程:不选第i行的数字:f[i][
2021-11-30 16:50:32
407
原创 [LibreOJ - 507] 接竹竿 (前缀和优化dp)
[LibreOJ - 507] 接竹竿题目链接大致题意:一共有n张牌,每张牌上有一个花色c和一个点数v,花色不超过k 种。将这些牌依次放入一列牌的末端。若放入之前这列牌中已有与这张牌花色相同的牌,你可以选择将这张牌和任意一张花色相同的牌之间的所有牌全部取出队列(包括这两张牌本身),并得到与取出的所有牌点数和相同的分数。现在已知 这n张牌放入队列的顺序,求最多能得多少分解题思路:状态表示:f[i]f[i]f[i]表示选择第i张牌,得到的最大分转移方程:f[i]=max(f[i−1],f[j−
2021-11-29 18:34:24
663
原创 [洛谷 P1361] 小M的作物 (最小割 好题)
[洛谷 P1361] 小M的作物题目链接大致题意:懒癌题是好题,题解不算是好题解解题思路:对于每一株作物,仅能种在 A/B 的一块田地里,也就是二选一如果只有一个作物,我们肯定选择种在A或者种在B两者中最大的一条边,删掉小边那多个作物呢,同理,去掉最小边,使其分成两个不相通的集合,到这里,不就是求最小割吗?但是较为麻烦的是额外的收益怎么处理呢对于这种情况,我们将这个组合里所有点作为一个点集,根据AB区,分别连向s,t,建立一个新点x用s连向x,即同样,建立一个新点y,连向
2021-11-19 20:01:55
504
原创 [vjudge HDU - 1400] Mondriaan’s Dream (状压DP 轮廓线DP 经典题)
[vjudge HDU - 1400] Mondriaan’s Dream题目链接大致题意:在 ???? × ???? 的棋盘内铺满 1 × 2 或 2 × 1 的多米诺骨牌,求方案数。解题思路:状压DP 状压的话,骨牌的表示状态不同,对应的解法也不同,这里把两种都讲一下 状态表示:f[i][s1]表示第i-1行已经放满且第i行状态是s1的方案数 s1表示第i行的状态,s2表示第i-1行的状态(1) 骨牌横放表示00,竖放表示10(上1下0) 下凸形对于竖放的骨牌,相邻
2021-11-18 20:39:39
579
原创 [vjudge UVA - 437] The Tower of Babylon (DAG上的DP)
[vjudge UVA - 437] The Tower of Babylon题目链接大致题意:有 nnn 种砖块,已知三条边长,每种都有无穷多个。要求选一些立方体摞成一根尽量高的柱子(每个 砖块可以自行选择一条边作为高),使得每个砖块的底面长宽分别严格小于它下方砖块的底面长宽,求塔的最大高度。解题思路:建立DAG由于每个砖块的底面长宽分别严格小于它下方砖块的底面长宽,因此不难将这样一种关系作为建图的依据,而本题也就转化为最长路问题也就是说如果砖块$ j $能放在砖块 iii 上
2021-11-17 22:50:08
176
原创 [洛谷 P4099 HEOI2013] SAO (树形dp求方案数)
[洛谷 P4099 HEOI2013] SAO题目链接大致题意:给出一个树形图,求有多少种不同的拓扑序解题思路:如果你把这题看成拓扑图,多半你已经凉了……树形图,那么就和树没有什么区别,我们完全可以把它看作是一棵树,然后考虑方向的限制通常我们在树上跑dpdpdp,就是在做树形dpdpdp,设f[i]f[i]f[i]表示以iii为根的子树不同的拓扑方案数然而在转移的过程中可以发现,转移的序列是这样子的:xxxxxxUxxxxxxVxxxxxxxxxxxxUxxxxxxVxxxxxxxxx
2021-11-17 13:30:41
252
原创 [洛谷 P1450 HAOI2008] 硬币购物 (容斥应用好题)
[洛谷 P1450 HAOI2008] 硬币购物题目链接大致题意:4 种面值的硬币,第 iii 种的面值是 cic_ici。nnn 次询问,每次询问给出每种硬币的数量 did_idi 和一个价格 sss,问付款方式解题思路:如果用背包做的话时间复杂度是O(4ns)O(4ns)O(4ns),超时!但是这道题明显的特点是硬币一共就四种.抽象模型,其实就是让我们求方程∑i=14cixi=s,xi<=di\sum_{i=1}^4c_ix_i=s,x_i<=d_i∑i=14cix
2021-11-16 12:29:22
458
原创 [codeforces 708C] Centroids (二次扫描换根法)
[codeforces 708C] Centroids题目链接大致题意:给出一棵树,你可以选择断掉其中的一条边将其重新连接到任意一个节点上,使其形成一棵新树,请问有多少个节点可以通过这种操作成为树的重心解题思路:首先了解树的重心的概念,树的重心是所有子树大小都小于等于n/2n/2n/2的节点如果某一节点不是树的重心,那么这一节点有且仅有一个子树的大小超过了n/2n/2n/2,那么直观的想法就是从超过n/2n/2n/2的子树中取下小于等于n/2n/2n/2的最大节点数的一个子树,使其连在根节
2021-11-13 12:42:49
647
原创 数位dp笔记(详解+例题+解析)
数位dp笔记简单介绍数位:把一个数字按照个、十、百、千等等一位一位地拆开,关注它每一位上的数字。如果拆的是十进制数,那么每一位数字都是 0~9,其他进制可类比十进制。数位 DP:用来解决一类特定问题,这种问题比较好辨认,一般具有这几个特征: 1.要求统计满足一定条件的数的数量(即,最终目的为计数); 2.这些条件经过转化后可以使用「数位」的思想去理解和判断; 3.输入会提供一个数字区间(有时也只提供上界)来作为统计的限制; 4.上界很大(比如 1018),暴力枚举验证会超时。考虑人类
2021-11-12 21:00:17
2654
原创 [codeforces 1187E] Tree Painting (二次扫描换根法)
[codeforces 1187E] Tree Painting题目链接大致题意:给定一棵有 nnn个结点的无根树,所有结点都是白色的第一次操作可以随意使一个结点染成黑色,之后每次操作可以使一个与黑色结点相邻的白色结点变成黑色每次操作可以获得的权值为被染成黑色的白色结点所在的白色连通块的结点数量求可以获得的最大权值解题思路:我们可以利用树形dpdpdp求出某一点开始染色的权值,但如果循环跑nnn次树形dpdpdp,复杂度超了,那怎么解决呢?二次扫描换根法二次扫描换根法,顾名思义,就是
2021-11-11 12:19:40
520
原创 [洛谷 P6554] Promises I Can’t Keep(二次扫描换根法 好题)
[洛谷 P6554] Promises I Can’t Keep题目链接大致题意:我只是题面的搬运工这个电路有 n 个节点,每个节点有一个权值 val,以 n-1 条导线互相连通。你可以把电源接在任意一个起点上。接着,电流从这个节点开始流。若当前电源接到了一个节点 u,则接下来电流会等概率且不重复经过一个点地流向一个叶子节点,电流流过的所有节点的权值即为电路显示屏上的数(叶子节点即为 除了 u 的度数为 1 的节点)现在你有 n种接电源的选择,你希望接上电源以后期望得分越高越好,所以你现在就要
2021-11-10 19:12:29
454
原创 [codeforces 461B] Appleman and Tree (树形dp求方案数)
[codeforces 461B] Appleman and Tree题目链接大致题意:给出一棵以 1为根的树,除根之外有些点是黑色,有些点是白色。求有多少种划分方案数,使得将树划分成若干个连通块并且每个连通块有且仅有一个黑点解题思路:状态表示:f[i][0/1] 表示i点属于一个无黑点/有且只有一个黑点的联通块的方案数初始化:如果i点是黑色,f[i][1]=1,否则f[i][0]=1转移方程对于i点是黑色f[u][1] = f[u][0] * f[v][1] +
2021-11-10 09:12:08
223
原创 [洛谷 P3177 HAOI2015] 树上染色 (树形分组背包 经典)
[洛谷 P3177 HAOI2015] 树上染色题目链接大致题意:要求将k个点染成黑色,求黑点两两距离及白点两两距离,使他们之和最大解题思路:我们把点与点的距离化简为点到点之间边的计算,怎么把距离转化为边的计算呢,就是记录每一条边被经过的次数,也就是统计每条边的贡献求每一条边的贡献任务量很大,我们再降低难度,求某一条边的贡献边的贡献来源于它在两点的路径上,如果两点在同一侧,那对边没有贡献,只有在边的两侧,才会对边产生贡献,也就是说,边的两侧没有一对合法的点,边就会被经过一次,贡献就会加1
2021-11-09 16:47:31
196
原创 [洛谷 P1272] 重建道路 (树形背包 经典)
[洛谷 P1272] 重建道路题目链接大致题意:概述:删除最少数量的边,使得存在一棵节点数恰好是p个的子树解题思路:最常见的就是f[i][j]为以i为根的子树,保留j个节点拆掉的最小边数可以发现题解中各种初始化和转移琳琅满目,有的-1,有的-2.其实就是因为dp状态没有讲清楚先说第一种,f[i][j]表示以i为根的子树,保留j个节点,且当前子树与父节点相连,拆掉的最小边数每个状态代表一棵子树,这个子树与父节点相连初始化: f[i][1] = son[i] 一开始的点都是不连儿子只连
2021-11-09 11:05:57
379
原创 [洛谷 P2986 USACO10MAR] Great Cow Gathering G (换根dp 经典)
[洛谷 P2986 USACO10MAR] Great Cow Gathering G题目链接大致题意:有一颗树,你可以选定一个根节点,这个根节点的代价是∑c[i]∗dis[i],c[i]表示点i的点权值,dis[i]表示点i到根节点的距离解题思路:二次扫描换根法操作1:先处理出以1为根节点的时候的代价定义状态方程: f[i]表示i子树中所有点到i的代价转移方程:f[u] += f[v] + w * cnt[v] (cnt[i]表示i的子树中所有点权和)操作2:重新定义状态方程
2021-11-06 14:46:51
309
原创 [洛谷 P4084 USACO17DEC] Barn Painting G (树形dp经典)
[洛谷 P4084 USACO17DEC] Barn Painting G题目链接大致题意:给定一颗N个节点组成的树,3种颜色,其中K个节点已染色,要求任意两相邻节点颜色不同,求合法染色方案数解题思路:f[i][j]表示i这个点上色为j是方案数(从下往上/从子节点向父节点更新)即对于所有初始节点,f[i][1],f[i][2],f[i][3]都为1当某个节点被指定上色后,那么该节点另外两种颜色的方案数为0。列如:当点x被指定上色 2 时:f[x][1]=0,f[x][3]=
2021-11-06 14:07:44
275
原创 [洛谷 P1273] 有线电视网 (树形分组背包)
[洛谷 P1273] 有线电视网题目链接大致题意:n个节点,m个叶子节点,根节点为1号点,每一条边都有一个边权,代表花费,叶子节点具有点权,代表收益问在总收益>=0的情况下,可以连通最多多少个叶子节点如果我简化题意不是很清楚,请看原题意解题思路:这个题不是很好想,如果我们把每棵子树看作是一个分组,那么组内可以不选叶子节点,可以选一个,可以选两个…也就是说,每一个组内最多只有一种决策,分组背包!!分组背包的状态表示是前i个组中,选j个物品的最大收益但是我们这是树形结构,要在加一
2021-11-06 10:51:03
235
原创 [洛谷 P1131 ZJOI2007] 时态同步 (树形dp)
[洛谷 P1131 ZJOI2007] 时态同步题目链接大致题意:n个点,n-1条边的无向树,根节点为s,每一条边有代价w加上最小的代价把所有叶子节点到根节点的距离调为相同解题思路:贪心去想怎样花费的代价最小呢,肯定是调整一次边,可以对多个叶子节点产生影响所以,调整越靠近根节点的边最终的代价越小例如以这种方式,就可以保证用最小的代价把所有叶子节点调整到同一深度定义状态方程:f[i]表示从i到i的子树的叶子节点的最长距离每次调整的代价为 f[u]-(f[v]+w) (w为u到v的
2021-11-05 19:45:17
238
原创 [codeforces] Choosing Capital for Treeland (换根dp)
[codeforces] Choosing Capital for Treeland题目链接大致题意:Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市。每条道路只能单向通行。现在政府需要决定选择哪个城市为首都。假如城市i成为了首都,那么为了使首都能到达任意一个城市,不得不将一些道路翻转方向,记翻转道路的条数为k。你的任务是找到所有满足k最小的首都。解题思路:二次扫描与换根法如果我能知道以每一个点为根节点,需要翻转道路的最小值就好了如果我们不能一次求出来,
2021-11-05 18:15:10
149
原创 [洛谷 P3478 POI2008] STA-Station(换根dp 入门)
[洛谷 P3478 POI2008] STA-Station题目链接大致题意:给定一个 n 个点的树,请求出一个结点,使得以这个结点为根时,所有结点的深度之和最大一个结点的深度之定义为该节点到根的简单路径上边的数量解题思路:二次扫描与换根法以1为根以2为根可以发现,2的子树(包括2)深度都减少了1,1的子树(包括1)深度都增加了1定义状态方程 f[i]表示以i为根节点的所有结点的深度之和最大值 cnt[i]表示以i为根的子树的深度之和如果v的父亲节点是u那么f[v]=f[u
2021-11-05 16:01:33
341
原创 [洛谷 P2016] 战略游戏 (树形dp 经典)
[洛谷 P2016] 战略游戏题目链接大致题意:给出一棵包含n个节点的无根树,如果在i点放置一名守卫,那么这名守卫可以望到i点以及与i相连的边求放置最少的守卫,使得可以望到所有的边解题思路:经典题型本题是放置最少守卫可以望到所有边,换句话就是说一条边的两端节点必须选一个对于一个节点来说,我们只有两种选择,放或者不放,且每名守卫只能望到与他相连的边所以我们可以这样定义状态方程f[i][2] 表示在以i点为根节点不放守卫且满足条件的最少守卫或在以i点为根节点放守卫且满足条件的最少守卫如
2021-11-05 15:25:29
2503
原创 [洛谷 P2014 CTSC1997] 选课 (树形dp 经典)
[洛谷 P2014 CTSC1997] 选课题目链接大致题意:给定一棵含有 n 个结点的森林,且树上的每个点有一个权值 w依赖限制:选择v点必须选择v的父亲节点u点求选择m个点的最大权值和解题思路:如果是一棵树,就是选择包含根节点的联通块的最大权值和因为是森林,意味着至少有一棵树,也就是至少有一个根节点引用图论里的知识,建立超级源点的思路,题目中所有点编号全部大于等于1,建立一个超级根节点0,将森林中的每一棵树的根节点连向超级根节点,那么就变成了求包含超级根节点的联通块的最大权值和
2021-11-05 14:38:28
450
原创 [洛谷 P2015] 二叉苹果树 (树形dp 经典)
[洛谷 P2015] 二叉苹果树题目链接大致题意:给定一棵含有 n 个结点的树,树根编号为 1,且树上的每条边有一个边权 w要求我们只保留树中的 m 条边,使得树根所在的连通块的所有边边权之和最大解题思路:类似有依赖的背包问题,不过本题是边具有权值,而不是点本题的依赖性在于,说的完整一点就是当某条边被保留下来时,从根节点到这条边的路径上的所有边也都必须保留下来首先定义状态方程:f[i][j]表示i的子树上有j条边的最大边权和如果我们选择u的子节点v的子树上的边时,就一定要选择u,v的
2021-11-05 13:44:05
215
原创 [SPOJ - BALNUM] Balanced Numbers (数位dp经典类型)
[SPOJ - BALNUM] Balanced Numbers题目链接大致题意:求区间内,一个数的数位上每个奇数出现偶数次,每个偶数出现奇数次,这样数的个数解题思路:这道题感觉用不到常规的参数,例如pre(上一个数字),sum(每一位数字的和)等等…因此我们需要想办法把奇数和偶数的出现次数存起来,最后进行判断状压是不是可以呢?一共只有0~9十种数字,用三进制表示,0表示没出现过,1表示出现了奇数次,2表示出现了偶数次,而且310=59049,内存不超,可以敲为了方便,写两个函数,一个
2021-11-04 14:58:02
180
原创 [HDU - 4734] F(x) (数位dp)
[HDU - 4734] F(x)题目链接大致题意:f(x) = a(n)*2(n-1)+a(n-1)*2(n-2)+…a(2)*21+a(1)*20,( a(i)表示十进制数x中第i位的数字 )给出a,b,求出0~b有多少个不大于f(a)的数解题思路:首先先计算出f(a)的值然后将f(a)的值作为初始值,每次递归减去每一位对应的数值,只要递归到最低位时sum>=0,说明满足条件,累加结果AC代码:#include <bits/stdc++.h>using n
2021-11-03 20:49:21
140
原创 [HDU - 3652] B-number (数位dp入门)
[HDU - 3652] B-number题目链接大致题意:统计区间 [1,n] 中含有 ‘13’ 且模 13 为 0 的数字有多少个解题思路:模13等于0,老套路了,利用参数yu判断即可含有13这个条件利用flag标记就行,flag=0表示没有13,flag=1表示前一个数字是1,flag=2表示包含13这类题做的多了就会打了AC代码:#include <bits/stdc++.h>using namespace std;typedef long long ll
2021-11-03 20:32:44
275
原创 [HDU - 3709] Balanced Number (数位dp)
[HDU - 3709] Balanced Number题目链接大致题意:给定区间[a,b],求区间内平衡数的个数平衡数:即有一位做平衡点,左右两边数字的力矩相等解题思路:判断力矩是否相等,需要参数sum记录力矩情况,初始为0,递归到最低位还是0,说明左右两边力矩相等对于平衡点,需要进行枚举统计所以枚举的平衡点,每一次dfs结果会加上固定平衡点满足条件的数字个数除此之外,数字0也是满足的,但是00,000,0000不满足,所以最终答案res-len+1AC代码:#include
2021-11-03 18:26:17
128
原创 [POJ - 3252] Round Numbers (数位dp入门题)
[POJ - 3252] Round Numbers题目链接大致题意:统计区间[l,r]内的数二进制形式下,0的个数>=1的个数的数的个数解题思路:入门题因为要统计0的个数和1的个数,因此需要两个参数num0,num1分别表示二进制中0和1的个数递归到最低位是,判断num0是否>=num1即可,累加结果AC代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const
2021-11-03 18:03:25
199
原创 [codeforces] Beautiful numbers (数位dp好题)
[codeforces] Beautiful numbers题目链接大致题意:统计区间[l,r]内的数能整除它所有位上的非零整数的个数解题思路:如果一个数能整除它所有位上的非零整数,那么它一定可以整除它所有位上非零整数的最小公倍数因此我们需要参数prelcm,用来记录前面数的最小公倍数但是我们不可能记录这个数字本事是多少,因为它太大了,我们需要把它缩小通过计算可以知道1~9的最小公倍数是2520,假设数字x可以整除它的所有位上的非零整数那么,x%lcm(a[i])=0然后2520%l
2021-11-03 16:52:34
210
原创 [LibreOJ - 2215] 方伯伯的商场之旅 (数位dp)
[LibreOJ - 2215] 方伯伯的商场之旅题目链接大致题意:给出l,r,k,求将l与r之间的数进行x操作的最小代价.x操作指将一个数转化为k进制,表示有几堆石块,每堆石块恰有该数位上的数个石子,相邻两堆距离为1,将它们并成一堆,代价为石头数量*距离.解题思路:对于固定一个位置来说,代价我们可以求出来,但是怎么求出最小代价呢?思考ing…数位dp肯定是要对位数下刀!!!不要坐以待毙,先把固定第一位的代价求出来当我们把固定点从低位向高位转移时,可以发现,代价会加上左边的数字和,减
2021-11-03 08:35:31
141
原创 [黑暗爆炸 - 1799] self 同类分布 (数位dp)
[黑暗爆炸 - 1799] self 同类分布题目链接大致题意:统计区间[l,r]中各位数字之和能整除原数的数的个数解题思路:两个关键信息:各位数字之和 整除原数各位数字之和只需要参数sum统计即可,整除余数可以通过余数来判断但是我们只有递归到最低位才知道数字之和,但是余数需要从开始就确定模数才能进行递归,那怎么解决呢?我们发现最多只有18位,也就是说各位数字之和最大也就18*9,我们可以通过枚举模数mod,每次dp求出区间[l,r]各位数字之和等于模数,且余数等于0,就是整除原数的数字
2021-11-02 19:32:13
168
原创 [codeforces] Classy Numbers(数位dp)
[codeforces] Classy Numbers题目链接大致题意:统计区间[l,r]中,在十进制下表示,出现不超过三个非零数字的个数,例如4,200000,10203解题思路:cnt表示非零数字出现的次数,当cnt>3跳过即可所有能递归到最低位的均为合法情况状态方程:f[i][j] 表示第i位出现了j个非零数字的数字个数AC代码:#include <bits/stdc++.h>using namespace std;typedef long long l
2021-11-02 19:06:56
258
原创 [codeforces] Salazar Slytherin’s Locket (数位dp)
[codeforces] Salazar Slytherin’s Locket题目链接大致题意:统计区间[l,r]中,在b进制下每种0~b-1的数的个数都出现偶数次的个数,不包含前导零解题思路:因为涉及到数字0的计算,所以前导零的判断一定有然后我们思考,怎么统计0~b-1每一个数字是否出现了偶数次呢?状压!!!异或操作:相同为0,不同为1也就是说如果数字1异或偶数次数字1,结果不变,还是1所以我们可以用(1<<k)-1表示初始状态 二进制状压表示状态,根据枚举的数字i,通
2021-11-02 18:36:56
190
原创 [LibreOJ - 10166] 数字游戏 (数位dp入门题)
[LibreOJ - 10166] 数字游戏题目链接大致题意:统计区间内,取模数的个数取模数:这种数字必须满足各位数字之和 mod N 为 0解题思路:我们需要参数sum记录每一位数字和当递归到最低位时,判断sum是否可以对N取模即可,累加结果AC代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 30;int n;int a[N];ll f[N
2021-11-02 18:17:26
1652
原创 [LibreOJ - 10164] 数字游戏 (数位dp入门题)
[LibreOJ - 10164] 数字游戏题目链接大致题意:统计区间内,不降数的个数不降数:这种数字必须满足从左到右各位数字成小于等于的关系,如 123,446解题思路:我们只需要参数pre记录上一位的数字是多少在搜索枚举过程中,将i<pre的情况跳过即可 (i当前位枚举的数字是多少)AC代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 30
2021-11-02 18:05:42
1880
原创 [HDU - 3555] Bomb (数位dp入门题)
[HDU - 3555] Bomb题目链接大致题意:统计区间内,包含连续49的数字个数解题思路:对于包含49,需要参数pre记录前一位数字情况容斥原理,包含49的数字个数=总个数-不包含49的数字个数与 HDU - 2089 不要62 同类型状态方程:f[i][j]表示到第i位,前一位数字是否是4满足条件的数字个数AC代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;con
2021-11-02 14:28:27
173
原创 [黑暗爆炸 - 1026] windy数 (数位dp)
[黑暗爆炸 - 1026] windy数题目链接大致题意:统计区间内,不含前导零且相邻两个数字之差至少为2的正整数的个数解题思路:与 HDU - 2089 不要62 同类型对于相邻数字之差至少为2,需要参数pre记录前一位数字情况题目明确不含前导零,因此前导零参数也必须有当zero=1(有前导零)时,相邻两个数字之差至少为2这个条件不需要成立,因为后一条件必须要有两个都不为前导零的真实数字存在两种成立情况写成zero || abs(pre - i) > 1当zero=0(没有前
2021-11-02 14:09:24
306
原创 [黑暗爆炸 - 1833] count 数字计数 (数位dp经典题)
[黑暗爆炸 - 1833] count 数字计数题目链接大致题意:给定两个正整数 a和b,求在[a,b]的所有整数中,每个数码(0~9)各出现了多少次解题思路:需要统计0的出现次数,所有必须要有参数前导零,因为前导零不计算为0的出现次数因为要计算0~9每一个数字的出现次数,所以我们对于每一个数字进行数位dp,找到区间[a,b]的所有整数中,数字i出现的次数既然需要枚举每一个数字,那么我们还需要参数dig表示哪一个数字,除此之外,还需要参数sum,表示数字i出现的次数总和状态方程f[N]
2021-11-02 11:07:29
291
原创 [HDU-2089] 不要62 (数位dp模拟题)
HDU - 2089 不要62题目链接大致题意:总结来说,给一个区间,统计区间中不含4和62的数字个数解题思路:数位dp模板题对于62的情况我们需要记录上一位数字,所以用到pre定义状态方程: f[i][2] 表示到第i位,且上一位是不是6的数字个数在搜索枚举每一位数字时,当遇到4或者连续62直接跳过,那么只要枚举到最低位的数字一定是符合条件的,记录答案AC代码:#include <bits/stdc++.h>using namespace std;typede
2021-11-02 10:30:52
88
原创 [洛谷] P3174 [HAOI2009]毛毛虫 (树形dp 树的最长直径的扩展)
毛毛虫题目链接大致题意:总结来说,给出一棵树,让你求出一条链,使得这条链上的点和与这条链直接相连的点的总点数最大输出最大的总点数解题思路:树形dp (树的最长直径的扩展)不难发现,每一个结点对答案的贡献是该结点的度数减一那么我们可以把每个点的贡献值当为该点的权值,题目就可以转化为求一条权值和最大的链定义状态方程:f[i]表示以i为起点,一条权值和最大的链显然,我们不知道以哪个点位起点最优,不妨以1号点为起点,跑一遍dp,求出1号点权值和最大的一条链,记录尾节点为x,我们就可以确定x是
2021-11-02 08:47:59
251
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人