10 2021 档案

摘要:爆了... T1 考虑树形背包。 显然,最优策略一定是在图上找一个节点数为K的子图拿出来,然后答案是这个导出子图每条边的权值乘2减去一个直径。 这个东西不好做,但是我们可以树形dp。 设f(i,j,0/1/2)为第i个点在这个联通块内时,这个选择了的连通块的大小为j,i及其子树内部无直径/有直径 阅读全文
posted @ 2021-10-31 22:07 lei_yu 阅读(50) 评论(0) 推荐(0) 编辑
摘要:今天的题比较简单,然而巴蜀的dalao们几乎都接近AK/kk T1 发现就是一个加限制汉诺塔。用矩阵快速幂计算。 但是最后一个点过不去。 考虑卡常: 1、向量乘矩阵可以n平方实现。 2、可以预处理出2i的矩阵。 3、每一次直接减去lowbit以减少复杂度。 如果还是过不去,有一种叫光速乘的 阅读全文
posted @ 2021-10-29 18:55 lei_yu 阅读(44) 评论(0) 推荐(0) 编辑
摘要:我要重开!!!! Day -1 上午最后一场模拟赛,把所有的可得分都拿了,考得比涂神还好,我真是high~到不行啊。 改了一下题之后,晚上看了一下"组合数学",了解了一些之前没有学过的考纲内出现的奇怪内容 Day 0 上午又看了一点高斯消元和线性代数,害怕他考奇怪的线性基又看了看线性基。 然后又看了 阅读全文
posted @ 2021-10-25 08:30 lei_yu 阅读(63) 评论(0) 推荐(0) 编辑
摘要:这道题的核心思路在于把多个元素的集合转化为最多3个元素的集合,然后再通过偏序问题常用方法得到答案。 首先对于任何一个集合,丢掉一个不对答案产生贡献(abc都比其它的小)的元素不会对答案造成影响。因此我们对每一种集合都只保留能够产生贡献即至少有一个(a/b/c)是最大值的元素。 那么任何一个集合都最多 阅读全文
posted @ 2021-10-21 08:08 lei_yu 阅读(45) 评论(0) 推荐(0) 编辑
摘要:费用提前计算。 我们可以不记录当前是第多少段,而是转化为每分一段就会给后面的所有工作增加一个常数的时间,提前计算这一部分代价即可。 #include<bits/stdc++.h> #define int long long using namespace std; #define orz cout< 阅读全文
posted @ 2021-10-19 19:38 lei_yu 阅读(38) 评论(0) 推荐(0) 编辑
摘要:裂开。。。 T1 求逆元见 https://www.cnblogs.com/lytql/p/15021752.html 然后我们考虑期望的线性性,求出每一个点都期望答案的贡献。 一个点被选中的概率其实只和第一个点A1和当前点Ax有关,和其它的A无关。 我想到一种绝妙的理解方法! 我们 阅读全文
posted @ 2021-10-18 19:23 lei_yu 阅读(52) 评论(4) 推荐(1) 编辑
摘要:当需要求模某个数得到某个值的个数之类的东西时,如果模数比较小,可以考虑把模这个数的结果记入DP数组中! 这个题就是这样。我们枚举每一位上的数字和是多少直接作为模数。最后问的就是模这个数等于0且每一位加起来等于这个数的数的个数。 数位dp就可以解决了。 这里注意一下我们只需要 阅读全文
posted @ 2021-10-16 09:37 lei_yu 阅读(25) 评论(0) 推荐(0) 编辑
摘要:a 阅读全文
posted @ 2021-10-15 21:23 lei_yu 阅读(15) 评论(0) 推荐(0) 编辑
摘要:这东西有啥用啊。。。 即需要维护一棵一堆点权为二元组的树。其中一种权需要满足二叉搜索树的性质,另外一种点权需要满足二叉堆的性质。 建树方法: 按照二叉搜索树那个权值从小到大排序,那么当前插入这个点一定是二叉搜索树中的最大点。假设这是一个大根堆: 因此只有三种可行情况: 1、放根节点、其它的作为左子树 阅读全文
posted @ 2021-10-15 09:24 lei_yu 阅读(39) 评论(0) 推荐(0) 编辑
摘要:T1 啊这。 显然,每一次最多能删掉n-1条边,实际上就是跑剩余边的最大生成树。 所以暴力就是模拟删边过程,得到每条边在第几次求最大生成树的时候被选中。 然而我们可以对每一条边进行考虑。当从大到小排序后,对于某一条边来说,一定是先判断能不能在第一次删,如果不能再判断能不能在第二次删,依次类推。可以发 阅读全文
posted @ 2021-10-14 15:25 lei_yu 阅读(7) 评论(0) 推荐(0) 编辑
摘要:好题。 我的思考方向:一段不能翻的区间,一定是烤同一方向。可以把原来的那个东西变成一堆类似 1 1 1 1 1 20 1 1 1 1 15 1 11 ... 的区间,求在其中取尽量少的区间个数,使得其和为n 。。然而个数依然是105个,没有实质性的突破。 然后就不会了 考虑朴素算法。可以想到f 阅读全文
posted @ 2021-10-13 21:55 lei_yu 阅读(33) 评论(0) 推荐(0) 编辑
摘要:妙啊。 首先想了一种离谱的方法。 设f(i,j)ij已经匹配时的最大收益。 那么就要知道上一个哪两个匹配,然后它们中间就一定是空格。然而这个时间复杂度为O(n4)而且还不知道怎么分配空格。 我们考虑把分配空格交给dp来做。 设f(i,j,0/1/2)表示前i位和前j位已经使 阅读全文
posted @ 2021-10-13 11:02 lei_yu 阅读(43) 评论(0) 推荐(0) 编辑
摘要:2021.10.10 T1 其实很简单,没有必要用题解方法。我们只需要先计算出每一个位置在吃多少次之后就吃不到了。(一开始就吃不到的可以先删掉) 之后按照这个次数从小到大枚举,维护当前在剩下的序列中的位置即可。 每一次删除一个点需要判断当前位置是否需要减1。用树状数组判断即可。 剩下的位置的序号可能 阅读全文
posted @ 2021-10-11 20:44 lei_yu 阅读(48) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2021-10-08 18:51 lei_yu 阅读(3) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2021-10-07 15:39 lei_yu 阅读(1) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2021-10-04 21:19 lei_yu 阅读(2) 评论(0) 推荐(0) 编辑
摘要:发现树形背包又忘掉了。。。所以来复习一下顺便写博客。 朴素的树形背包是定义f(i,j)表示以i为子树用j重量时的最大价值。 那么我们再枚举给每一颗子树分配多少重量,这就是和背包类似的方法了。 #include <cstdio> #include <algorithm> using std::ma 阅读全文
posted @ 2021-10-03 21:59 lei_yu 阅读(29) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2021-10-03 13:14 lei_yu 阅读(5) 评论(1) 推荐(0) 编辑

点击右上角即可分享
微信分享提示