今天瓜成一坨了。
瓜的说不出话来。
直接退役算了我。
T1
傻逼题,但是我傻逼地敲了一个线段树合并,然后把空间炸了,只剩20分,
直接dfs维护子树大小,子树中最大最小值即可统计答案。
1 //Achen 2 #include3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include
T2
我已经菜到连f[i][j]表示放完前i个数,最后一个放的数是前i个数中第j大的的方案数的dp都想不出来了。。。
上午一直在瞎yy一个三方的垃圾算法,以为t1t3稳了这题大概要T一些点,结果T1爆空间T3没拍写挂了,这题却tmd水过去了。。大概就是从小的往大的连边,这个图的拓扑序的数目就是答案,发现这个图很特殊,可以区间dp,f[l][r]表示把l~r取完的方案数,组合数转移,写的是记忆化搜索。
1 //Achen 2 #include3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include
T3
先dp出lcs,f[i][j]表示a的前i个字符和b的前j个字符的lcs.
再dp答案。g[i][j]表示a的前i个字符中长度为f[i][j]并且在b的前j个字符中出现过子序列个数。
两种转移
1、不选a[i],
如果f[i-1][j]==f[i][j]
g[i][j]+=g[i-1][j]
2、选a[i]
找到b的前j个字符中最靠后的一个和a[i]相等的字符b[k],
如果f[i-1][k-1]+1==f[i][j]
g[i][j]+=g[i-1][k-1];
1 //Achen 2 #include3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include