摘要: 这题。。 我真傻,真的。。我单知道单调队列可以优化dp,加上平衡树,却不知道单调栈就可以。。 求给定矩形最大的同字母矩形面积。(字母数:a,b,c) 多组数据$n,m≤1000$ 真的学傻掉了。。写出来一个$O(n^3)$dp方程还跟真的一样去想优化。。最后只能做到$O(n^2logn)$。。 一开 阅读全文
posted @ 2019-02-28 23:33 Ametsuji_akiya 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 地址 注意思路!多看几遍! 很巧妙的一道题。不再是决策点以dp值中一部分含j项为维护对象,而是通过维护条件来获取决策。 首先有个贪心策略,让底层的宽度尽可能小,才能让高度尽可能高。所以应该倒着dp,表示堆$i$~$n$的最高高度$f[i]$,同时这种最值应来源于之后的j,要在设一个$g[i]$表示以 阅读全文
posted @ 2019-02-28 22:20 Ametsuji_akiya 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 这里已经讲得很清楚了。 方程$f_i=\min\{f_j+\max_{j+1\sim i}\}$。 本质上是决策点与区间最大值有一定关系,於是用单调队列来维护决策集合(而不是常规的),然后在决策集合中选取最小值。 然后觉得这题方法还是很重要的。没写平衡树,用优先队列(堆)来维护,单调队列维护最大值删 阅读全文
posted @ 2019-02-28 21:57 Ametsuji_akiya 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 地址 一排N个木板,M个工匠站在不同位置$S_i$,每个人可以粉刷覆盖他位置的、最长长度为$L_i$木板段,每刷一个有$P_i$报酬。同一木板只刷一次。求最大报酬。 根据每个人的位置dp,设$f[i][j]$为第$i$个人刷前$j$个木板的最大报酬。$j<s[i]$表示不刷。 那就有 $f[i][j 阅读全文
posted @ 2019-02-28 21:40 Ametsuji_akiya 阅读(155) 评论(0) 推荐(0) 编辑