传送门 分四个方向分别讨论. 每次枚举当前行iii,然后对于第二维jjj用斜率优化dpdpdp. f[i][j]=(j−k)2+mindisk2f[i][j]=(j-k)^2+mindis_k^2f[i][j]=(j−k)2+mindisk2​其中mindismindismindis表示离第iii行的最短距离. 这个显然可以斜率优化 代码…
传送门 发现题目要求的就是从下到上的瓶颈路. 画个图出来发现跟去年noipnoipnoip提高组的奶酪差不多. 于是可以二分宽度+并查集检验,或者直接求瓶颈. 代码…
传送门 考虑如果一个区间满足最小值等于最大公约数那么这个区间是合法的. 因此我们对于每一个点维护可以延展到的最左/右端点保证这一段区间的gcdgcdgcd等于这个点的值. 这个可以用之前同类的链表或者用单调栈维护. 代码…
题目大意: 给一个金字塔图(下面的宽度大于等于上面的宽度),每层的高度为1,从中选取k个互不重叠的矩形,使面积最大. 题目分析: \(f[i][j]\)表示选到第i层,选择了j个矩形的最优方案. 转移方程:\[f[i][k] = max\{f[j][k - 1] + (i - j) * (y[i] - x[i] + 1)\}\] 列式并化简为斜率形式:\[S(i, j) = \frac{f[i] - f[j]}{i - j} >= y[i] - x[i] + 1\] 斜率dp裸题. code #…
描述 这道题目说的是,给出了n项必须按照顺序完成的任务,每项任务有它需要占用机器的时间和价值.现在我们有一台机器可以使用,它每次可以完成一批任务,完成这批任务所需的时间为一个启动机器的时间S加上所有任务需要的时间.并且它是在完成所有任务后才会把任务的成果输出,这样我们就在那一时间时得到所有这些任务的一个完成时间.我们现在要求一种完成任务的方式使得所有任务的完成时间乘上该任务的价值之和最小. 输入 第一行,一个数n表示任务的总数 第二行,一个数s表示开机的时间 接下来n行,每行两个数a,b,a表示…
传送门 考虑直接推式子不用优化怎么做. 显然每一个二进制位分开计算贡献就行. 即记录fi,jf_{i,j}fi,j​表示距离iii这个点不超过jjj的点的每个二进制位的0/10/10/1个数. 但直接存是会爆炸的. 考虑到每个数只会被用一次,所以可以考虑主席树那种复用信息的思想来继承长链后代的信息,然后短链直接暴力统计贡献就行. 由于ldxldxldx蒟蒻是口胡选手只会暴力写法,因此正解差不多是照着标程写的233. 细节较多,用指针维护比较自然一些. 代码…
传送门 首先按照题意构造出转移矩阵. 然后可以矩阵快速幂求出答案. 但是直接做是O(n3qlogm)O(n^3qlogm)O(n3qlogm)的会TTT掉. 观察要求的东西发现我们只关系一行的答案. 于是倍增预处理出logloglog个矩阵每次变成O(n2)O(n^2)O(n2)转移. 代码…
传送门 这是一道困饶了我一年的题. 其实就是去年去NOIP提高组试水的时候考的模拟题 但当时我水平不够,跟ykykyk一起杠了一个下午都没调出来. 今天终于AAA了. 其实就是一个维护最长连续010101串的变形. 分几种情况讨论下就行. 我们令最长子段的左右端点为l,rl,rl,r l=1l=1l=1,直接停在111号点. r=nr=nr=n,直接停在nnn号点. 最长子段在中间,根据题目的定义,这个时候根据题目定义它的到两边的长度应该是r−l+22\frac {r-l+2} 22r−l+2​…
传送门 正难则反. 考虑计算两人相遇的方案数. 先正反跑一遍最短路计数. 然后对于一条在最短路上的边(u,v)(u,v)(u,v),如果(dis(s,u)*2<total&&dis(v,t)*2<total)说明两人可以在这条边上面相遇. 如果对于一个点从起点到它的距离刚好是最短路的一半也可以在这个点相遇. 代码…
传送门 考场上并不会写二分的check函数,下来看了看题解发现真是妙极. 不难想到每次直接从四个角各按阶梯状拓展出合法区域A,再检验B是否合法就行了.(然而考场上写的弃疗了) 于是题解用了一些小技巧优化了一波. 我们在读入矩阵的时候可以存它在旋转0度,90度,180度,270度0度,90度,180度,270度0度,90度,180度,270度时的状态. 然后这四次拓展可以封装成为同一个函数. 突然好些了许多 代码…