8.12 dp模拟赛总结】的更多相关文章

暴力\(DP\) 这题做法很多,有\(O(n^2)\)的,有\(O(n^2logn)\)的,还有徐教练的\(O(nlogn)\)的,甚至还有\(bzt\)的二分+线段树优化建图的费用流. 我懒了点,反正数据范围这么小,就写了个\(O(n^2)\)的暴力\(DP\). 先将两个数组都排序,一个显然的性质,就是人选择钥匙时不可能相交. 所以我们设\(f_{i,j}\)表示前\(i\)个人选择了前\(j\)把钥匙时所用最大时间的最小值. 转移也很简单. 代码 #include<bits/stdc++.…
LINK:生成树 这场比赛我打的真失败 T3是比较容易的 却一直刚 那道"数论" 10分其实搜一下全排列. 30分容易想到对边进行装压dp. 不过存在一些细节 可以对于一个连通块的壮大进行装压 也就是每次需要联通两个块的时候使用关键边 然后再这两个块之间加边知道加满需要其他边. 复杂度 \(2^{21}\cdot 21\cdot 6\) 可能能过或许是我的做法不太行? 值得一提的是这样是无标号的需要最后乘以一个阶乘. 可以发现之所以装压边是为了防止 一些边的添加使得最小生成树变化. 可…
LINK:探险队 非常难的题目 考试的时候爆零了 完全没有想到到到底怎么做 (当时去刚一道数论题了. 首先考虑清楚一件事情 就是当前是知道整张地图的样子 但是不清楚到底哪条边断了. 所以我们要做的其实就是选择最优的路线 使得遇到断边情况下是最优的. 可以发现在某个点出现断边的时候 此时断的一定是这个点到终点最短路上的边 这样是最差的结果. 那么其实就是断边只会断由T发出的最短路树上的边. 到达某个点知道断边之后 其实要求出断开这条边再到T的最短路. 暴力是\(nm\cdot logn\)的 考虑…
可以区间dp,但是复杂度太高. 所以应该是贪心,怎么贪心呢? 这种题目,最好还是手玩找一些规律. 可以发现,由于保证可以m次填完,所以颜色之间没有相互包含关系. 比较像分治的模型. 所以考虑拿到一个区间怎么处理. 假设a[l]==a[r],那么为了合法,一定先刷这种颜色.然后分部分递归下去. 否则,对于区间:AEEGEABBBCDDC 里面的夹心肯定不能先处理了,可以大概看做:A..AB..BC..C 先刷哪一个? 刷两边长度较小的一个 证明: 如果刷中间,那么中间的位置之后就不能再动了.如果刷…
A. 接力比赛 跑两遍背包,再进行一些玄学的剪枝 代码 #include<cstdio> #include<algorithm> #define rg register inline int read(){ rg int x=0,fh=1; rg char ch=getchar(); while(ch<'0' || ch>'9'){ if(ch=='-') fh=-1; ch=getchar(); } while(ch>='0' && ch<…
二兵的赌注 Description游戏中,二兵要进入了一家奇怪的赌场.赌场中有n个庄家,每个庄家都可以猜大猜小,猜一次一元钱.每一次开彩前,你都可以到任意个庄家那里下赌注.如果开彩结果是大,你就可以得到你之前猜大的庄家相应的ai元钱.如果开彩结果是小,你就可以得到你之前猜小的庄家相应的bi元钱.你可以在同一个庄家那里既猜大又猜小,(这样是两块钱),也可以什么都不猜(这样不用钱).问怎么样下注,才能赢得最多的有保障的钱.有保障的钱指不管开彩结果是大是小,你都能够赢得相应的钱.你能帮助他计算这个值吗…
可以发现,答案O(根号)(因为链上答案最大,n/2,n/3...根号种) 每次求答案要二分 优秀的做法是: 对于小于根号n的暴力nlogn找,可能二分到同一个mid,记忆化一下最小的tot值 对于大于根号n的枚举答案(从min(n/sqrt(n),ans[]之前ans最小值),,开始枚举)计算最少需要的tot关键点数量,一个区间答案就确定出来了. 卡卡常可过.…
https://www.luogu.org/blog/a23333/post-xing-xuan-mu-ni-sai-path-ji-wang-zui-duan-lu 如果设f[i]表示从i到n的期望 那么转移方程比较好列. 但是取min的环形转移? 反过来想, 如果我们知道了f[x]的大小关系, 其实,可以化简成 其实就是,我们把一些min变成f[x]然后再消一消. 其实转移貌似没有环了? 但是我们不知道大小关系. 一些边没有用,度数减少一些. 只有比f[x]小的f[y]会转移到x,感觉和最短…
森林 考虑到题目中给出条件两点间至多只有一条路径. 就可以发现,这是一个森林. 而森林有一个很有用的性质. 考虑对于一棵树,点数-边数=\(1\). 因此对于一个森林,点数-边数=连通块个数. 所以,我们只要前缀和求出询问区间内的点数和边数,就可以计算出连通块个数了. 注意边数要分两个方向讨论,然后询问时注意防止越界. 代码 #include<bits/stdc++.h> #define Tp template<typename Ty> #define Ts template<…
写在前面的总结 离联赛只有几天了,也马上就要回归文化课了. 有点舍不得,感觉自己的水平刚刚有点起色,却又要被抓回文化课教室了,真想在机房再赖几天啊. 像19/11/11那场的简单题,自己还是能敲出一些比较稳的暴力,虽然不见得能拿很高档的暴力或者打出正解,但至少不会挂分,最后能拿到的分数也还能看.但是一上点难度,或者不对胃口,就明显感觉力不从心.总是只能打最低档的暴力,甚至有些题只能拿\(10pts\)的\(dfs\)分.有优化想不出来,有式子也推不出来.时间也总是不够用--在某道题上浪费了太多时…