题解 CF1314D Tourism
February 24, 2020
开场 10 分钟就有人过的 1D ,你值得拥有!
swap(B, D) 警告。
题解 CF1183H Subsequences (hard version)
June 27, 2019
瞎搞DP
CF出了H没出G 菜的真实
发现k从E题的100变成了O(1012),考虑与k复杂度无关的做法。
我们考虑fi,j表示以si开始,本质不同的长度为j的子序列数量。
题解 CF1051E Vasya and Big Integers
May 28, 2019
哈希 + 二分 + DP
首先看到题面,很容易想到一个DP,令f[i]为划分到i为止的方案数。
然后朴素的暴力转移是O(n2)的,非常显然一个状态i能够转移到的j是一段连续的,进而想到使用前缀和优化。
题解 CF1117D Magic Gems
March 2, 2019
有趣的矩阵乘法
(为方便,下文中“大号宝石”代指连续的m个分裂出来的宝石,“小号宝石”代指未分裂的单个宝石)
首先,我们观察这题,考虑DP,设状态fi表示已经取了i个单元的方案数的不难推出一个朴素的O(n2)DP方程fi=i−j≥m∑fj+1(可以理解成上一个大号宝石放的位置,最后一个1即为全部用小号宝石填满的方案)
我们再仔细看看这个式子,加个前缀和,不难优化到O(n),然而数据范围n≤1018,这让我们考虑O(logn)级别的算法,我们接下来考虑矩阵乘法优化这个式子。
题解P2892 追捕盗贼
February 21, 2019
本篇题解讲述的为非完美做法,但是可以骗到96分
说实话我在网上找了好久结果都是这个O(n2)的非正解树型DP
听说有个O(N)的正解在某篇论文里?
算了反正我也看不懂
所以我接下来就介绍一下这个O(n2)的树型DP吧QwQ
顺手丢一下我学习的这篇blog吧
题解 CF1111C Creative Snap
February 12, 2019
简单递归
首先我们如果要消灭一段区间[l,r],我们可以有三种选择:
- 如果[l,r]区间内没人,那么直接花费A的代价将这段摧毁
- 如果r>l(即这段区间长度>2),可以选择把它切割成[l,⌊2l+r⌋] [⌈2l+r⌉,r]两段
- 如果[l,r]区间内有人,直接花费b(r−l+1)x的代价将其摧毁。
题解 CF1096G Lucky Tickets
December 29, 2018
其实我很想吐槽这题
我比赛的时候疯狂WA on test 16
然后死活找不出来哪儿错了
我觉得我数组开小了
于是我开到MLE都没有过掉
最后一看
被一个n = 2的点卡掉了……
才出4题,罚时爆炸,上黄失败,掉分哭唧唧
题解 洛谷P5003 跳舞的线-乱拐弯
November 21, 2018
一道有点套路化的网格图上DPQwQ
我们用fmin[i][j][0]表示线头在(i,j)这个点的时候,线的方向朝__下__,我们能取到的最小的拐弯次数、用fmin[i][j][1]表示线头在(i,j)这个点的时候,显得方向朝__右__,能够取到的最小的拐弯次数
同理,我们用fmax[i][j][0]与fmax[i][j][1]表示线头在(i,j)位置是线朝下和朝右能够取到的最大的拐弯次数。
接下来,对于有障碍的点,我们直接不处理
显然,答案分别为max(fmax[n][m][0],fmax[n][m][1])与min(fmin[n][m][0],fmin[n][m][1])
算法学习笔记-单调队列
September 27, 2018
前言
单调队列一种非常经典的将O(n^2)的DP优化的O(n log n)的方式,在一个点可以更新一个范围的时候可以发挥很大作用。
记得当年NOIp2017我考PJ(那年的T4考到了单调队列),当时还不会,在考后听教练讲了一遍之后仍旧处于懵逼状态,大概1个月前照着题解打了一遍,但是到了现在已经忘得差不多了QwQ,于是写了一遍优化过的多重背包来练练手。
题解 洛谷P4267 [USACO18FEB]Taming the Herd
July 31, 2018
竟然没有人写题解2333那本蒟蒻就来H2O一篇吧
首先,看完题面不难想到DP,之后再看数据范围考虑O(N3)DP,之后瞎搞一通可以想到
f[i][j]表示在前i个里面经历k次出逃可以取到最少的修改数
那么接下来我们就发现f[i][j]可以影响的范围为f[u][j+1](i<u≤n),然后我们就可以写出如下的程序: