Codeforces 264B Good Sequence (DP)

题意:给你一个严格递增序列,让你取出其中一个子串,使得子串中任意两个相邻的数不互质,求最长的酱紫的子串。
TLE的思路:O(n)求出所有素数,对于每一个素数扫一遍序列,把有这个质因子的数和他之前最近的有这个质因子的数连一条边,然后最后扫一遍序列,如果连边了就用边的另一个端点更新当前点。因为素数还是很多的,时间复杂度接近O(n^2),爆炸
题解看来的思路:有点像O(nlgn) 求最长上升子序列,记录素数p[i],用f[i]表示以因子p[i]结尾的子串最长的长度。处理出每个数的所有质因子(在线性筛里面记录一个pre[i]),扫一遍数列,对于某个数的所有因子取max,再把所有因子的f[]更新为max+1。最后答案是f[]值取maximum。玄学思路,就像LIS用f[i]存长度为i的最小值一样,省掉了用所有1~i-1的数更新本身的时间。还要多多领悟才是。

猜你喜欢

转载自blog.csdn.net/xyyxyyx/article/details/81071561