Something Useful?(Maybe)

  • 最长上升子序列的状态定义不只有“$dp_{i, j}$ 表示以 $j$ 结尾的最长上升子序列长度”,还有经典二分做法的“$dp_{i, j}$ 表示长度为 $j$ 的最长上升子序列的结尾最小值”。

  • 0/1 序列的题目可以考虑分段。

  • 树上一堆点和边构成的连通块数量是「点数减边数」。

  • 在「选点」的问题中,如果要强制选某个点,那么可以考虑给这个点加上一个极大值/极小值,算出答案后再减回来。

  • 网络流建模,如果是网格图并且每个格子和相邻格子之间有关系,那么可以考虑黑白染色,转化成二分图再考虑。

  • 网络流建模,更准确地来说是最小割。如果无法用「源点到当前节点的边表示选择,当前节点到汇点的边表示不选」这种建模方式,可以考虑「对称式」建模。即「源点到某些点的边表示选择,另外某些点到汇点的边表示选择」。

  • 注意用到了倍增思想的数组处理(例如 st 表),它们处理时大部分都是 $f(i) = g(f(i - 1))$ 这样的模式,所以将倍增的那一维作为第一维会省掉非常多的内存不连续访问带来的时间消耗。

  • 最小割,「收益 - 代价」最大化时,一般以「代价」来割边。但是此时「收益」可能并不是所有「可能获得的收益」之和,也有可能是「理想情况下的收益」。它们的共同点是:忽略了某些要求,让最小割来满足这些要求并求出最小代价,所以请考虑哪些要求可以描述为「必须划分成两个集合,连接两集合之间的边必须割掉」。

posted @ 2023-12-21 10:00  A_box_of_yogurt  阅读(1)  评论(0编辑  收藏  举报  来源
Document