指望得分:61+?+37优化
实际得分:61+21+14ui
难度评估错误,放弃去想正解和一闪而过的二维前缀和,觉得很不可打,因而打了61部分分。spa
然而这是三道题里最简单的。递归
正解:差分+二维前缀和io
考虑如何二维差分,实际上就是硬凑,假设并验证全部块的差分前缀和是否正确。class
+1 -1搜索
+1 -1hack
+1 -1样式
-1 +1co
获得如上。
而后对对角线作差分,作前缀和转化获得二维差分,再作二维前缀和获得原矩阵。
妙啊,秒啊
考场上不会状压dp转移,正序倒序入度出度一直不能区分。
记忆化搜索,递归转移,至关于倒序。这样式子也很好写。
100%也是这个思路,只是优化状态数。
不记录每一个位置存不存在,转而记录球的颜色。
用哈系表能够作到。
注意到:
000101状态不惟一,多是2B2W,1B2W......
为了区分,加入轮数的信息。
在最高位打标记1,这样每一轮标记的位置不一样。
考试上秒了第一问,第二问猜了个结论。
一开始没有看见后两个样例(好几回了啊喂),码完去盯了一个小时T2
9点多看到发现过不去第三个,把本身hack了,心态爆炸。
正解:
第一问是缩完边后奇数点个数/2,以前的结论(然而我缩边打炸了)
但用老路子求出第一问对第二问没帮助。
设二元组f[u][0/1]={c1,c2}表示u向fa出不出边,子树中有c1个奇数点,c2条通过边。
以后进行子树合并dp,至关于作背包。
而后对父亲边分类讨论,更新f[u][0/1]
背包正确性:
因为没有要求最长链最短之类,那么哪两条链合并是无所谓的,咱们只要关心有没有合并,记录有没有多出来的线头。