tg 62
当你不会做题的时候,想想\(DP\)就好了
T1
当时两小时扔在假贪心上
最后\(11:40\)想到\(DP\)
\(11:50\)测完大样例全过
最后清空RE还是死了
\(f_{i,0\space or\space 1}\)就是处理完前\(i\)列走到\(0\space or\space 1\)行最小步数
思路非常简单:
\(1.\)异行没有关键点
这个时候\(f_{i-1,j}\to f_{i,j}\)只用\(1\)步
但是\(f_{i-1,j\space \mathrm{xor}\space 1}\to f_{i,j}\)用\(2\)步
\(2.\)异行有关键点
这个时候是都用\(2\)步
T2
首先一个结论,
就是选上一个串\([l,r]\)以后,一定可以选上\(l\)左端点\([r+1,n]\)右端点所有串
因为这一部分字典序一定大,
而后边选不选只和\(l\)有关系,所以不选白不选
然后就是个\(LIS\)问题,可以用\(O(n^2\log n)\)收一波分
但是众所周知这个东西撑死\(2e3,\)做个\(5e3\)可以费死劲
看到这个数据范围只用考虑消个\(log\)
但是众所周知消掉\(LIS\)的\(log\)可以费死劲
考虑从其他方面入手
比方说这个字典序
令\(f_i\)就是以串\([l,n]\)结尾的最优答案
然后你要考虑每个决策\(j\)的后缀\(LCP\)这一段是不能转移的,
因为不满足字典序小呢
再考虑上\(LCP\)以后的第一个字符,这个也是字典序的一部分
于是能连上的部分就是抠掉\(LCP\)以后的部分然后再加上\(j\)的部分
快速求\(LCP\)可以考虑后缀数组,
但是这里对时间复杂度没有要求
考虑一个\(DP\)方法就好了
\(g_{i,j}=\begin{cases}
g_{i+1,j+1}+1,s_i=s_j\\
0,s_i\not =s_j
\end{cases}\)
T3
一个小时反手计数\(DP+DP\)优化
最后发现常见优化策略都是负优化
暴力\(DP\)就是\(f_{i,j}=f_{i-1,j-1}+f_{i-1,j}+f_{i-1,j+1}\)对吧
有没有发现一个东西就是这玩意长得很像矩阵快速幂套路?
然后你就会发现原来这个优化是负优化,因为转移矩阵规模是\(n\times n\)的
再考虑倍增,然后你就会发现在做无谓的挣扎
上述内容宣告\(DP\)彻底走向死亡,考虑组合数学推式子

T4
最小费用最大流?
感到\(xor\)

浙公网安备 33010602011771号