04 2023 档案

小木棍
摘要:题目传送门 这题有四个剪枝: 优化搜索顺序,将木棍长按照从大到小排序 枚举木棍时保证编号递增。 剪掉冗余搜索状态,同一组内的重复元素直接跳过 如果这根木棍是这一组的第一根或最后一根,搜索完直接返回。 结论4的证明:如果当前木棍是第一根,下面的没有使用过的木棍都是等效的,如果这里不行,那么下面的一定也
17
0
0
斜率优化
摘要:重点讲讲斜率优化的套路。 首先需要将式子化为 y=kx+b 的形式,其中 y,x 为一个关于变量 j 的式子,k 为一个关于常量 i,b 的式子。然后根据 x,k 的单调性考虑是二分还是直接单调。注意如果求最小值是下凸包,最大值是上凸包(最小值是直线从下面往上靠,最大值反之)
10
0
0
特别行动队
摘要:题目传送门 其实这题直接推式子,不需要转换,还是很简单的。 考虑用 fi 表示前 i 名士兵修正战斗力之和的最大值。令 X=sumisumj,易得 fi=fj+aX2+bX+c。 将 X=sumisumj 代入得 $f_i=f_j+a(sum_i-sum_j)
9
0
0
运输小猫
摘要:题目传送门 考虑每只小猫是否能被接到、等待时间,其实在于 start+d2+d3++di 的值,如果 ti,即出发时间加上这些距离晚于 ti。可以将 d 移过来,那么每只小猫都可以用一个数 ai 来衡量了。对于 a 排序,即可以划分成最多饲养员数
21
0
0
任务安排3扩展
摘要:这道题还可以继续加强,如果 t,c 都可以是负数,那么二维的点就可以在中间加,动态维护有序序列,平衡树。
2
0
0
任务安排3
摘要:题目传送门 考虑这里的斜率 ti+s 并不单调,所以用二分解决。 #include<bits/stdc++.h> using namespace std; #define L(i,l,r) for(int i=l;i<=r;++i) #define R(i,l,r) for(int i=r;i
14
0
0
任务安排2
摘要:承接上文任务安排1。 考虑优化转移。对方程变形得到 fj=(s+ti)cj+fiscntici,我们可以发现形如一个 y=kx+b 的解析式。然后我们就可以维护一个下凸包,又因为横坐标是单调的,斜率也是单调的,每次都可以把队首的一些点删掉,就是队首的斜率 当前的
11
0
0
任务安排1
摘要:题目传送门 一个重要思想:当前的 s 准备时间对之后的影响可以用后面所有的和 ×s。利用上述性质,可以提前计算每个分组中 s 的贡献,消除后效性。f[i] 表示以 i 为一段的末尾的答案。由此可以得出方程是 $f[i]=\min f[j]+(sumc[i]-sumc[
4
0
0
再探石子合并
摘要:题目传送门 考虑朴素的 dp 方程 f[i][j]=minf[i][k]+f[k+1][j]+sum[j]sum[i1]。先证明四边形不等式,证明决策单调性的范围 p[i][j1]p[i][j]p[i+1][j]。复杂度是因为中间都消掉了,所以就是状态数 $O(n^
14
0
0
多重背包单调队列
摘要:考虑思考一下 f 最暴力的转移。设 v,w,s 为当前处理的物品的体积、价值、数量。然后体积 jmodv=r。显然是 $f[i][j]=\min f[i-1][j],f[i-1][j-v]+w,f[i-1][j-2v]+2w,f[i-1][j-3v]+3w,\dots,f[i-1][
42
1
1
玩具装箱
摘要:题目 首先这道题与 诗人小G 有很大的相同点。其实就是超级弱化版(弱化数据,弱化 p=2)。 考虑使用斜率优化,式子 fi=fj+(si+sj+ji1L)2,对其进行变形 ai=sumi+i,bi=sumi+L+1+i,则 $dp_i=dp_j+(a_i-b_j)
7
0
0
数的乘积
摘要:数的乘积 考虑用除法解决这个问题。因为如果这些数的乘积超过了 1018,那么用 1018 依次除以这些数肯定存在一个时刻变为 0。所以就可以在不使用 __int128 这类黑科技的情况下方便的判断。注意如果有一个数是 0 应该立刻停下输出 0,不然可能出现 Float
20
0
0
常见OJ错误返回
摘要:Float Point Exception 出现 ÷mod0
20
0
0
诗人小G
摘要:诗人小G 考虑普通的 DP。令 fi 表示划分前 i 个句子的最小不协调度。可以用前缀和处理,易得方程 fi=fj+|sisj+ij1l|p,注意这里空格是需要考虑长度的,也就是 j+1i 成立了一段,那么应该是 i(j+1)+11=ij1
18
0
0
四边形不等式
摘要:核心其实是决策单调性。 四边形不等式 基本概述 四边形不等式本质是在决策时利用单调性进行的一种优化,通常与动态规划结合 例题 石子合并 我们先看一道非常经典的问题: 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次
85
0
0
KMP
摘要:2021 年就学了KMP,2023写一篇详细点的总结。 首先我们需要理解朴素做法。 枚举开始匹配的位置 i,和匹配串中的每个位置逐一匹配,失败就停止移动继续匹配,最坏情况复杂度高达 O(mn) 上述做法的缺陷就在于没有充分利用信息,比如匹配失败时就从头开始。我们考虑一次匹配中,如果失败了,那
10
0
0
点击右上角即可分享
微信分享提示
深色
回顶
收起