#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<cmath> using namespace std; int main(){ //hdu4117 } /* 给定n个字符串,要求按顺序取一些字符串,满足后一个字符串是前一个字符串的子串,要求使得取出的权值和最大。 dp[i]=max{ dp[j] }+w[i] (j∈i) 建立AC自动机 (1) 因为对于一个点,它沿Trie的边走的是他的前缀,沿Fail走的是他的后缀 于是可以枚举所有前缀的所有后缀/所有后缀的所有前缀 O(n^2) (2) g[i]表示i所有前缀中dp值的最大值,于是可以对于每个节点枚举所有后缀的g[i]最大值 更加优越的O(n^2) (3) 对于(2)搞一个树链剖分 O(nlogn) */
原文地址:https://www.cnblogs.com/Kong-Ruo/p/8228231.html
时间: 2024-11-05 16:09:16