今天瓜成一坨了。
瓜的说不出话来。
直接退役算了我。
T1
傻逼题,但是我傻逼地敲了一个线段树合并,然后把空间炸了,只剩20分,
直接dfs维护子树大小,子树中最大最小值即可统计答案。
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
1 //Achen
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include<set>
11 #include
T2
我已经菜到连f[i][j]表示放完前i个数,最后一个放的数是前i个数中第j大的的方案数的dp都想不出来了。。。
上午一直在瞎yy一个三方的垃圾算法,以为t1t3稳了这题大概要T一些点,结果T1爆空间T3没拍写挂了,这题却tmd水过去了。。大概就是从小的往大的连边,这个图的拓扑序的数目就是答案,发现这个图很特殊,可以区间dp,f[l][r]表示把l~r取完的方案数,组合数转移,写的是记忆化搜索。
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
1 //Achen
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include<set>
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];
![](http://img.e-com-net.com/image/info8/b8d97b5613f94ed2ba791cad57d0b2ed.gif)
![](http://img.e-com-net.com/image/info8/2f88dd3f1cd145f59c0e47b51acdbd4b.gif)
1 //Achen
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include<set>
11 #include