随笔分类 -  区间dp

摘要:对于每个区间[l,r],显然右端点r是必须放置守卫的。考虑其不能监视到的点,构成一段段区间。一个非常显然但我就是想不到的性质是,对于这样的某个区间[x,y],在(y+1,r)内的点都是不能监视到这个区间内的任何一点的,证明考虑一下斜率之间的关系即可。于是该区间的最右一个守卫可以放置在y,也可以放置在 阅读全文
posted @ 2018-12-07 00:24 Gloid 阅读(146) 评论(0) 推荐(0) 编辑
摘要:拿走一个区间的代价只与最大最小值有关,并且如果最后一次拿走包含区间右端点的子序列一定不会使答案更劣,于是设f[i][j][x][y]为使i~j区间剩余最小值为x最大值为y且若有数剩余一定包含j的最小代价,特别地f[i][j][0][0]表示取完i~j区间的最小代价。转移时考虑j最后和哪一段一起拿走, 阅读全文
posted @ 2018-10-13 12:39 Gloid 阅读(195) 评论(0) 推荐(0) 编辑
摘要:容易想到设f[i][j][k]为i~j区间以k为根是否能构成bst。这样是O(n4)的。考虑将状态改为f[i][j][0/1]表示i~j区间以i-1/j+1为根能否构成bst。显然如果是i-1作为根的话i~j区间都在它的右子树,所以转移时枚举右子树的根并判断是否合法,j+1类似。 阅读全文
posted @ 2018-10-12 19:00 Gloid 阅读(278) 评论(0) 推荐(0) 编辑
摘要:设f[i][j][k]为将i~j的字符最终合并成k的答案。转移时只考虑最后一个字符是由哪段后缀合成的。如果最后合成为一个字符特殊转移一下。 复杂度看起来是O(n32k),实际常数极小达到O(玄学)。 upd:突然发现根本没在bzoj上交。bzoj的数据输入中没有空格。 阅读全文
posted @ 2018-10-12 02:20 Gloid 阅读(351) 评论(2) 推荐(0) 编辑
摘要:首先按数据值排序,那么连续一段区间的dfs序一定也是连续的。 将权值离散化,设f[i][j][k]为i到j区间内所有点的权值都>=k的最小代价,转移时枚举根考虑是否修改权值即可。 阅读全文
posted @ 2018-10-11 02:20 Gloid 阅读(133) 评论(0) 推荐(0) 编辑
摘要:设f[i][j][0/1]表示i~j这段区间上一次选择的是最左/最右人的方案数。转移显然。 阅读全文
posted @ 2018-10-10 23:40 Gloid 阅读(156) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示