标签:利用 递推 前缀 并查集 mda 转移 答案 合并 trie树
T1:
题意:一个序列,每个数有p值和h值,求有多少对p值相同的数之间有一个数的h值小于m
思路:简单题,先求前缀和,在扫一遍得出答案(但调试花了一些时间);
题解:同上;
T2:
题意:给出n,m,d,表示一开始有n个为m的数,每次操作将一个非(非0最小值)的数变成[最小值-d,最小值],问将n个数变为0有几种变法;
思路:看题想到dp,考虑用dp[i][j][e]表示最小值为i,有j个为i的数,有e个大于i的数时的操作方案,每次O(d)转移。考虑优化,用前缀和使转移变为O(1)。又考虑n==1的特殊情况,是一个类斐波拉契数列的递推;
题解:dp[i]表示没有数为0,最小值为i的情况下的方案数,前缀和优化O(1)转移,最后统计1~d的dp值即为答案;
T3:
题意:给一课树,每个节点有一个字符串,边有权,点有权,问随机选两个点它们的点权之积*路径上最小边权*字符串最长公共后缀长度的期望值;
思路:没时间了,n^3暴力求和;
题解:最长公共后缀——反过来建Trie树。最小边——将边从大到小排序,一个一个加进来,再用并查集维护。优化——利用a=sigma(i=1~正无穷)[i<=a],得出结论,答案和Trie树上的深度有关,可以在合并Trie的过程中计算;
标签:利用 递推 前缀 并查集 mda 转移 答案 合并 trie树
原文地址:https://www.cnblogs.com/Cduiz/p/11621113.html