自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(204)
  • 收藏
  • 关注

原创 java大整数学习记录

要使用 javajavajava 的大整数,就得引入大整数类import java.math.BigInteger;大整数相加函数:bigInteger.add();大整数相乘函数:bigInteger.multiply();大整数相除函数:bigInteger.divide();整合代码:import java.math.BigInteger;public class EmployeeTest { public static void main(String[] a

2021-03-06 17:27:55 84

原创 markdown学习笔记

前言:因为平时写博客可能要用到数学公式啥的,所以学习一下markdown,在这个博客上记录一下。2021 2.11求和公式:\sum_{i=1}^{n} 或 \sum\limits_{i=1}^{n}效果:∑i=1n\sum_{i=1}^{n}∑i=1n​ 或∑i=1n\sum\limits_{i=1}^{n}i=1∑n​点乘:x \cdot y效果:x⋅yx \cdot yx⋅y...

2021-02-11 14:13:37 134

原创 Codeforces1207 F. Remainder Problem(分块)

传送门题意:给出一个长度为 nnn 的数组,初始值全为000,有 qqq 次操作,分为两种:1.1.1. 给 axa_xax​ 加 yyy2.2.2. 查询所有下标满足i%x=yi\%x=yi%x=y 的位置的元素和。题解:考虑分块,将数组分为 n\sqrt nn​ 块。对于查询操作,如果模数 x>nx > \sqrt nx>n​​ ,那么就暴力统计答案,因为这样最多只会遍历 n\sqrt nn​ 个块。如果模数 x≤nx \leq \sqrt nx≤n​ ,那么可以设一个

2021-11-02 16:51:30 225

原创 Educational Codeforces Round 116 (Rated for Div. 2) E. Arena(dp)

传送门题意:对于一个数组 aaa​ ,假如当前有 cntcntcnt​ 个 aia_iai​​ 大于 000,那么一回合后,所有大于000 的aia_iai​ 都会减去 cnt−1cnt-1cnt−1 ,假如经过几回合后,只剩下一个数大于000,则游戏结束,且存在胜者,反之则不存在胜者。求有多少数组aaa满足游戏结束时不存在胜者。题解:设dp[i][j]dp[i][j]dp[i][j]表示数组有 iii 个数,且所有数都是小于等于 jjj 的合法方案。1.1.1.​ 如果 i−1≥ji-1 \ge

2021-10-30 22:36:27 2664

原创 牛客练习赛90 D-妄想集合(线段树)

传送门题面:题解:先考虑不能构成三角形的最大集合:1,1,2,3,5,8,13,,,,,1,1,2,3,5,8,13,,,,,1,1,2,3,5,8,13,,,,,可以看出,这是个斐波那契数列,因为题目中所有数都不超过10910^9109,而斐波那契的454545项就达到了10910^9109。根据鸽笼定理,如果集合有大于454545个数,那就说明一定可以构成三角形。因此我们可以用线段树维护区间所有集合数字个数之和,如果大于454545,就一定可以,小于333,就一定不行。那么对于333到4

2021-10-30 16:28:22 190

原创 Codeforces 1251 E2. Voting (Hard Version)(贪心)

传送门题意:有 nnn 个人需要投票,你想让所有人都投票给你,有两种方式,一种是给第 iii 人 pipipi 的钱,另一种是当已经有 mimimi 的人投票给你,则 iii 会免费投票给你,求最后所有人都投票给你的最小花费。题解:首先对于容易跟风的人,我们尽可能的不去贿赂他,而不容易跟风的人,我们要优先贿赂他们。因此先按 mimimi 排序,然后从大到小对 mimimi 遍历,对于所有 mimimi 值为 xxx 的人,我们将其放入小根堆的优先队列 qqq,假设队列里的人都是想要跟风的,那么我们

2021-10-24 15:22:56 164

原创 P1640 [SCOI2010]连续攻击游戏 (二分图)

传送门题面:题解:不看标签还是很难想到建图,看了标签也想不到怎么建图。因为每个数字只能被选择一次,每个装备也只能被选择一次,那么就可以考虑装备与两个属性之间建边。那么问题就变成了二分图最大匹配问题。从1开始匹配,知道匹配不上为止。但是有一个细节,原本的匹配算法需要每次匹配时memsetmemsetmemset 数组,但是这里不能 ,会TLETLETLE ,需要用一个时间戳记录一下。代码:#include<cstdio>#include<iostream>#in

2021-10-19 13:49:05 1042

原创 AtCoder Beginner Contest 216 G - 01Sequence(差分约束)

传送门题意:构造一个010101序列,满足mmm个条件,区间[li,ri][l_i,r_i][li​,ri​]的111的个数至少为xix_ixi​ ,且构造出来的111的个数最少。题解:设sis_isi​为前缀111的个数,那么条件可以变为s[ri]−s[li]≥xis[r_i]-s[l_i]\geq x_is[ri​]−s[li​]≥xi​ 。有mmm个这样的不等式,最后求sns_nsn​的最小值,那么就是普通的差分约束,跑一遍djdjdj即可。在建边上有一些要注意的点,iii 和 i+1i+

2021-10-11 16:25:03 250 1

原创 AtCoder Beginner Contest 217 F - Make Pair(区间dp)

草稿

2021-10-09 19:18:50 158

原创 AtCoder Beginner Contest 217 G - Groups(第二类斯特林数)

传送门题意:nnn个整数,为111 ~ nnn ,将其分为 kkk 组,如果两数模 mmm 同余,则不能放在一组。求对于 k∈[1,n]k \in [1,n]k∈[1,n] ,输出分为 kkk 组的方案数。题解:如果没有限制条件,那么就是普通的第二类斯特林数。设dp[i][j]设dp[i][j]设dp[i][j]表示前 iii 个数分为 jjj 组的方案数,转移式为:dp[i][j]=dp[i−1][j−1]+j×dp[i−1][j]dp[i][j]=dp[i-1][j-1]+j \times

2021-10-09 18:51:46 115

原创 AtCoder Regular Contest 126 B-Cross-free Matching(最长上升子序列变形)

传送门题意:给出 2×n2 \times n2×n 个点,分别位于 (1,0),(2,0),...,(n,0),(1,1),(2,1),,,,(n,1)(1,0),(2,0),...,(n,0),(1,1),(2,1),,,,(n,1)(1,0),(2,0),...,(n,0),(1,1),(2,1),,,,(n,1)有mmm条线段,连接上下两点 (ai,0),(bi,1)(a_i,0),(b_i,1)(ai​,0),(bi​,1) ,要求选出最多的线段,使得两两不相交。题解:线段不相交要满足 a

2021-10-05 22:59:27 202

原创 2020-2021 ACM-ICPC, Asia Seoul Regional Contest G. Mobile Robot(思维)

传送门题意:给出 nnn 个机器人的位置,要求移动这些机器人,使其满足第 iii 个机器人和第 i+1i+1i+1 个机器人的距离刚好为 ddd。求这些机器人中的最大移动距离的最小值。题解:先假设第一个机器人不动,那么可以求出其他机器人的移动距离。设 mamama 为向左移动的最大距离,mimimi 为向右移动的最大距离,mimimi为负数,那么当移动第一个机器人时,mamama 和 mimimi 会发变化,如果第一个机器人向右移动,mamama会减小,但mimimi的绝对值会变大,反之向左移

2021-10-05 19:35:13 424

原创 AtCoder Regular Contest 127 B - Ternary Strings(构造)

传送门题意:构造3×n3 \times n3×n 个长度为 lll 的字符串,每一位只有0,1,20,1,20,1,2 三个数字,且满足第 iii 位一共有 nnn 个 000, nnn 个 111 , nnn 个 222​并且使得这些字符串中字典序最大的字符串字典序尽可能小。题解:第111 位一定有nnn 个 222 ,考虑三进制,那么字典序最大的字符串 ttt ≥2×3l−1+n−1\geq 2 \times 3^{l-1} +n-1≥2×3l−1+n−1我们可以使得 t=2×3l−1+n−

2021-10-04 13:17:42 204

原创 Codeforces 1581 C. Portal(前缀和)

传送门题意:给出一个n×mn \times mn×m 的 010101 矩阵,一次操作可以反转某个单元格的值。求最少需要多少次操作,才能使得矩阵中存在一个子矩阵,满足矩阵中间的值都为000,矩阵边界的值都为111,四个顶点可以不用考虑,且子矩阵的长要≥5\geq 5≥5,宽≥4\geq 4≥4。题解:枚举左上角顶点的行,再枚举左下角顶点的行,再枚举列,那么此时就确定了一条竖线。设cnt1cnt1cnt1该竖线为子矩阵边界所需要的操作数,cnt2cnt2cnt2 为该竖线为子矩阵中间的列的操作数。

2021-09-30 21:27:37 295 3

原创 Codeforces 1418 D. Trash Problem(set)

传送门题意:有nnn堆垃圾,每次操作可以选择一个位置 xxx ,然后将垃圾移到 x+1x+1x+1 或 x−1x-1x−1 ,当剩下最多两堆垃圾时,表示清理完成。有 mmm 次查询,查询分为两种:1.1.1. 在位置 xxx 放一堆垃圾2.2.2. 拿走位置 xxx 上的垃圾每次查询要输出最少的操作次数去清理垃圾。题解:很明显,要将其分为两段,使得两段的长度之和最小。一开始我是正着考虑维护答案,操作起来很麻烦。其实反着求更方便,即 答案===两端点之差−-− 中间最长的空隙。那么可以想到

2021-09-30 18:51:29 144

原创 Codeforces 1288 E. Messenger Simulator(树状数组)

传送门题意:有一个长度为nnn​的数组aaa​, 初始 ai=ia_i=iai​=i​ 。有 mmm​​ 次操作,每次操作会将 aaa 数组中数bib_ibi​ 放到第一位,空位补齐。求所有操作做完后,每个数 iii 在操作过程中的最小和最大位置。题解:考虑设置 n+mn+mn+m​ 个位置,初始时最后 nnn​ 个位置放111​~ nnn​ , 每次操作将数 bib_ibi​​ 放到 m−i+1m-i+1m−i+1​ 的位置上。考虑如何计算最大和最小位置。每次将 bib_ibi​ 向上提之

2021-09-28 15:29:14 135

原创 Codeforces 1288 D. Minimax Problem(二分+二进制压缩)

传送门题意:有nnn个长度为mmm的数组,选择其中的两个数组i,ji,ji,j 可以合成数组bk=max(a[i][k],a[j][k])b_k=max(a[i][k],a[j][k])bk​=max(a[i][k],a[j][k])求任意的两个i,ji,ji,j 使得数组bbb的最小值最大。题解:考虑二分最小值,那么我们可以将数组中所有≥\geq≥ 二分值的数变为111,反之,变为 000 。那么问题转换为选择两个二进制串,将其或操作为全111 。那么直接28×282^8 \times 2^

2021-09-28 15:15:17 115

原创 Codeforces 1373F. Network Coverage(二分)

传送门题意:有nnn个地点,第iii个地点需要接入aia_iai​ 个网络,第iii个地点存在一个基站,能为 iii和(i+1)%n(i+1)\%n(i+1)%n 提供bib_ibi​的网络,求是否有一种分配方法,使得每个地点都能够满足。题解:当确定 b1b_1b1​ 分配多少给 a1a_1a1​后,那么就可以在线性时间判断是否满足。所以考虑二分 b1b_1b1​ 为 a1a_1a1​ 分配多少。1.1.1. 当出现某个地点无法满足时,说明b1b_1b1​需要减少分配给a1a_1a1​ 的量2

2021-09-23 16:58:32 135

原创 Codeforces E. New Game Plus!(贪心)

传送门题意:有一个初始值x=0x=0x=0 和总和sum=0sum=0sum=0,每次选择数组中的一个数a[i]a[i]a[i] ,使得 sum+=xsum+=xsum+=x,x+=a[i]x+=a[i]x+=a[i] 。有kkk次重置初始值xxx的机会,即使 x=0x=0x=0 ,求最后能得到的最大的sumsumsum 。每个数只能选择一次。题解:一开始肯定是先从大到小排序,然后一个一个取,直至sumsumsum 变为负数。当sumsumsum变为负数后,就需要使用那kkk 次重置机会了。其

2021-09-21 22:02:45 148

原创 Codeforces 1417 E. XOR Inverse(字典树)

传送门题意:给出一个长度为nnn的数组aaa ,求一个最小的 xxx,使得 b[i]=a[i]⨁xb[i]=a[i] \bigoplus xb[i]=a[i]⨁x ,且数组bbb的逆序对数量最少。题解:比较两个数的大小,可以将其变为二进制,从高位往低位依次比较,直至遇到该位上的数不同。那么我们可以从前往后依次向字典树中插入每一个元素,插入数的过程中,从高位到低位依次考虑。假设当前是第 iii 位,如果插入的数在 iii 位为 000 , 那么该位贡献的逆序对数为 tree[root][1]tre

2021-09-20 20:25:04 156

原创 Codeforces 1417 D. Make Them Equal(思维+构造)

传送门题意:一个数组aaa ,每次操作可以选择三个数 x,y,zx,y,zx,y,z ,使得 a[x]−=x∗za[x]-=x*za[x]−=x∗z ,a[y]+=x∗za[y]+=x*za[y]+=x∗z最多做3n3n3n 次操作,问是否能将数组所有元素全部相等,输出操作方案。题解:观察发现,数组总和不变,那么最后所有元素相等,必然这个数会是平均数,那么判断总和是否能除以nnn。考虑将所有数先都加到a[1]a[1]a[1] 上。1.1.1. 如果a[i]%i=0a[i]\%i=0a[i]%i

2021-09-20 16:05:38 174

原创 Codeforces 1382D. Unmerge(思维+dp)

传送门题意:定义两个数组合并:每次比较开头的两个数,取小的数放入新数组,然后删除,重复上述过程,最后形成一个新数组。现在给出这个新数组,为全排列,求是否存在两个长度为nnn的数组合并后为这个新数组。题解:首先我们要发现,一个数 xxx 如果被放入新数组里,那么说明有一个数比他大,且这个数后面会被放到数组里。那么我们可以在新数组对 xxx 找到第一个大于它的数 yyy ,那么这两者之间的数就比 xxx 要小,那么这些数就不可能跟xxx 在不同的数组里,否则先进来的就不会是 xxx 。那么就可以知道

2021-09-18 21:48:59 127

原创 CSUST OJ 2006-Simple Inversions(带修主席树)

传送门题面:题解:考虑维护每次操作后的逆序对数量。假设我们已经知道操作前逆序对数量为ansansans 。交换 lll 和 rrr 只会影响区间 (l,r)(l,r)(l,r) 。考虑操作前区间(l,r)(l,r)(l,r) 里面有多少能跟 lll 形成逆序对 ,操作后区间(l,r)(l,r)(l,r) 里面有多少能跟 lll​ 形成逆序对 ,即求出区间(l,r)里面有多少数小于 lll 即可。对 rrr 同理。那么这里可以使用主席树。但是交换两个数后,主席树里面的东西也会发生改变,因为是单点

2021-09-15 23:32:48 105

原创 HDU 3951 Coin Game(对称博弈)

传送门题意:给出nnn枚硬币,形成一个环,两个人玩游戏,每次可以取走连续的(1,k)(1,k)(1,k)个硬币,取走最后一枚硬币的人获胜,求先手是否能赢。题解:1.1.1. 当 k=1k=1k=1 时,可以得出答案2.2.2. 当 k≥nk \geq nk≥n 时,先手可以直接拿走3.3.3. 当 k<nk<nk<n​ 时,先手拿走一些后,硬币形成一条链,后手在中间取1个或2个,就可以把链拆成两个相等的部分,那么之后先手不论怎么取,后手只要在另一半取一样的即可,那么最后取完硬币

2021-09-15 20:55:46 104

原创 CodeForces 1436 E. Complicated Computations(权值线段树)

传送门题意:求出所有子数组的MEXMEXMEX,

2021-09-12 23:25:11 152

原创 codeforces 1363E. Tree Shuffling(树上问题)

传送门题意:给出一棵树,每个点有三个值a,b,ca,b,ca,b,c ,分别代表权值,当前的值,希望变成的值,b,cb,cb,c为0或1。每次操作可以选择一个以uuu根的子树,然后选择k个点,kkk任意,然后将这些点的bbb值重排列,花费为k×a[u]k \times a[u]k×a[u]求最后所有点满足b都变为ccc 的最小花费。题解:设dp[u][0]dp[u][0]dp[u][0] 表示以uuu为根的子树内,有多少个点满足 b=0,c=1b=0,c=1b=0,c=1 ,dp[u][1]dp

2021-09-08 20:05:28 147

原创 Luogu P3594 [POI2015]WIL-Wilcze doły(单调队列)

传送门题面:题解:首先我们要发现,假如右端点为iii ,能到达的最远的左端点为 jjj 时,那么 右端点为 i+1i+1i+1 时,能到达的最远左端点一定大于等于 jjj 。为什么?假设存在这种情况,因为i+1i+1i+1 比 iii 多了一个 a[i+1]a[i+1]a[i+1] ,那么说明 iii 的最长区间的和比 i+1i+1i+1小,而i+1i+1i+1 能到达一个更小的位置,那么说明 iii 也能到达那个位置,与假设冲突。知道上述结论后,我们假设 iii 能到达的最远左端点为 lastl

2021-08-24 20:59:31 80

原创 Luogu P1776 宝物筛选(单调队列优化dp)

传送门题面:题解:经典的多重背包问题,但是会tletletle设dp[i][j]dp[i][j]dp[i][j] 表示前 iii个物品,容量为 jjj 的最大价值,那么转移很好转移:dp[i][j]=max(dp[i−1][j−k×w[i]]+k×v[i])dp[i][j]=max(dp[i-1][j-k \times w[i]]+k \times v[i])dp[i][j]=max(dp[i−1][j−k×w[i]]+k×v[i])考虑如何优化:设 j=k1×w[i]+dj=k_1\ti

2021-08-24 19:35:06 156

原创 codeforces 1168 B. Good Triple(思维+暴力)

传送门题意:给出一个长度为nnn的010101串,若一个区间满足以下条件,则是合法的,存在整数x,kx,kx,k 满足 l≤x<x+2k≤rl\leq x <x+2k \leq rl≤x<x+2k≤r    sx=sx+k=sx+2ks_x=s_{x+k}=s_{x+2k}sx​=sx+k​=sx+2k​求有多少区间是合法的题解:看完这道题感觉一点思路都没有,于是去看了题解,大受震撼事实上,一个长度为999的区间内必定存在一个满足条件的位置,因此直接暴力

2021-08-23 19:50:45 141

原创 codeforces 1197D. Yet Another Subarray Problem(dp)

传送门题意:给出一个长度为nnn的数组aaa ,对于一段区间[l,r][l,r][l,r] ,其值为 (∑i=lrai)−k×⌈r−l+1m⌉(\sum\limits_{i=l}^{r} a_i)-k \times \lceil \frac{r-l+1}{m} \rceil(i=l∑r​ai​)−k×⌈mr−l+1​⌉求数组中最大的区间的值。(m≤10)(m\leq 10)(m≤10)题解:dpdpdp ,状态设计很妙。不难发现,每mmm个数,就会增加一个kkk ,又因为mmm很小,所以设计这样

2021-08-23 15:33:43 114

原创 codefroces 1217 D. Coloring Edges(拓扑排序)

传送门题意:给出一个有向图,给每条边染色,如果图中存在环,那么这个环的每条边不能是同一种颜色。求染色需要的最少颜色数量。题解:可以分为两种情况讨论:1.1.1. 图中无环,那么每条边都可以染成同一种颜色。2.2.2.​ 图中有环,那么只需两种颜色即可。为什么?我们可以先找出图中所有的最小的环,即不被其他环包含的环。对于这些环,两两之间是相互独立的,那么每个环都可以只染1,2两种颜色,对于包含其他环的环,由于小的环已经满足条件了,所以大的环自然也满足条件了。再考虑怎么染色,既然知道只需染1,2

2021-08-23 10:57:47 124

原创 2017年西安区域赛 Sum of xor sum(线段树)

传送门题意:给出一个长度为 nnn 的数组,有 qqq 次查询,每次查询给出一个区间 [l,r][l,r][l,r] ,求这段区间里面所有子区间的异或和的总和。题解:不难想到,要按位考虑贡献,对于第 iii 位的贡献是 2i2^i2i 乘上区间111的个数为奇数的子区间的数量。考虑利用线段树维护一个区间中包含奇数个111的子区间数量。如何区间合并?设左区间范围是 [l,mid][l,mid][l,mid] ,右区间范围是 [mid+1,r][mid+1,r][mid+1,r] ,ansansa

2021-08-21 20:43:07 180

原创 2020 ICPC Asia East Continent Final D. City Brain(最短路+三分)

传送门题意:给出nnn​​ 个点,mmm条边的无向带权图,初始边权都为111,一共有kkk 次操作机会,每次操作可以选择一条边使其边权+1+1+1, 通过一条边的时间为 1/1/1/边权 ,求min(dis(s1,t1)+dis(s2,t2))min(dis(s1,t1)+dis(s2,t2))min(dis(s1,t1)+dis(s2,t2))题解:考虑枚举两条路径的公共起点和终点,假设长度 xxx , 对于剩下的各自走的边长度为 yyy ,贪心的考虑,肯定是将操作次数均分最好,即对于长度为lll

2021-08-20 12:55:34 1236

原创 2021杭电多校补题(9)

1. Integers Have Friends 2.0传送门题意:给出一个长度为nnn 的数组,选出一个最长的子序列,存在一个 m≥2m \geq 2m≥2 使得 ak1%m=ak2%m=ak3%m=....a_{k1}\%m=a_{k2}\%m=a_{k3}\%m=....ak1​%m=ak2​%m=ak3​%m=....求最长的长度。题解:codeforcescodeforcescodeforces​上的改编题,都是要往差值方向去想。首先,当m=2m=2m=2时,可以发现,当我们全部选偶

2021-08-18 10:20:14 116

原创 codeforces 1482 F. Useful Edges(思维+最短路)

传送门题意:给出一个nnn个节点的无向带权图,(n≤600)(n \leq 600)(n≤600) ,和 qqq 个三元组(u,v,l)(u,v,l)(u,v,l)。若一条边满足以下条件,则称为好的:1.1.1. 存在一个三元组,使得该边在uuu到vvv​的路径上,2.2.2. 且该路径的权值总和小于lll求有多少条边是好的。题解:先考虑暴力枚举每条边和每个三元组判断,对于一条边eije_{ij}eij​ ,和一个三元组(u,v,l)(u,v,l)(u,v,l) ,设dis[i][j]dis

2021-08-17 22:04:46 209 1

原创 codefroces 1100 F. Ivan and Burgers(前缀线性基)

传送门题意:给出一个长度为nnn的数组,有qqq次查询,每次查询给出一个区间 [l,r][l,r][l,r] , 求区间内一些数异或和的最大值。题解:求异或和最大,可以想到线性基,那么怎么求区间内异或最大呢?考虑给每个前缀维护一个线性基,对于一个新加进来的数,我们跟普通的线性基一样去处理它,但其中还要做一点改变。设pre[i][j]pre[i][j]pre[i][j] 表示前 iii 个数组成的线性基中,第 jjj 位的数在数组中的位置,那么我们就需要尽量让 pre[i][j]pre[i][j]

2021-08-17 19:55:08 80

原创 codeforces1303E. Erase Subsequences(dp)

传送门题意:给出两个字符串sss,ppp ,有一种操作:取 sss 中的某一个子序列 ttt ,将其加入到 p′p'p′的末尾 ,并在原串中删除。最多只能进行两次操作,问p′p'p′ 能否等于ppp题解:枚举字符串ppp 的断点,前一部分的长度为len1len1len1 ,后一部分的长度为len2len2len2 。设 dp[i][j]dp[i][j]dp[i][j] 表示原串sss 匹配前半部分的iii个字符,后半部分的jjj 个字符,最少需要的长度。那么只需判断 dp[len1][len

2021-08-16 21:03:20 229

原创 codeforces D. Fill The Bag(二进制+贪心)

传送门题意:给出一个数nnn ,和mmm个2的幂次方的数。每次操作可以将其中一个数拆成相等的两部分,即除以2,求最少的操作次数,使得最后可以选一些值使其总和为 nnn。题解:如果所有数总和不够nnn ,那么就一定不能构成。先统计这mmm个数每个二进制位上有几个111 。从低位到高位枚举nnn的每一位,若当前位为 111 :1.1.1. 若这一位111的数量足够,那么消耗111 ,剩下的合并成高位2.2.2. 若这一位1的数量为0,那么在最近的高位中找的一个111 ,然后拆分。若若当前位为 0

2021-08-15 11:21:17 116

原创 Codeforces Round #595 (Div. 3) F. Maximum Weight Subset(树形dp)

传送门题意:给出一棵树,有nnn个节点,每个节点都有一个点权,选出点权和最大的点集,满足每个点之间的距离都大于kkk 。题解:容易想到树形dpdpdp。设dp[i][j]dp[i][j]dp[i][j] 表示以 iii为根的子树,选出的点中与 iii​ 最近的距离为 jjj 。1.1.1. 如果节点 iii 要选,那么dp[i][0]=a[i]+∑dp[son][k]dp[i][0]=a[i]+\sum dp[son][k]dp[i][0]=a[i]+∑dp[son][k]2.2.2. 如果节

2021-08-11 14:23:21 98

原创 2021杭电多校(7) 补题

传送门1. Link with Balls题意:有2n2n2n个桶,对于第2x−12x-12x−1个桶,可以从里面得到kxkxkx个球,对于第2x2x2x个桶,最多可以拿xxx个球,求最后恰好拿到mmm个球的方案数。题解:对于第2x−12x-12x−1个桶,可以拿kxkxkx,对于第2x−22x-22x−2个桶,可以拿[0,x−1][0,x-1][0,x−1] ,那么这两个结合在一起,就可以拿任意数量的球,那么我们可以让相邻的桶两两结合:(0,1)(2,3)(3,4)...(2n−2,2n−1)

2021-08-10 20:18:42 166

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除