给定字典和文章,每个单词有价值,求写文章的最小价值

标准的 AC 自动机 dp,设 \(f[i]\) 表示写 \(s[1..i]\) 的最小价值,建立AC自动机后根据 trans 边暴力转移即可

建了个中间图结果被卡内存了,被迫删掉

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5e5+5;
vector <pair<signed,signed> > g[N];
int slen[N],w[N],ttt;
int min(signed x,int y) {return min(1ll*x,y);}
int f[N];
void msgOccur(int len,int pos,int wei) {
++pos; ++ttt;
int p = pos-len;
//f[i]=min(f[i],f[g[i][j].first]+g[i][j].second);
//g[pos].push_back(make_pair(p,wei));
f[pos]=min(f[pos],f[p]+wei);
}
struct ACA{
signed c[N][26],val[N],fi[N],cnt,ans[N];
void init(){
memset(c,0,sizeof c); memset(val,0x3f,sizeof val);
memset(fi,0,sizeof fi); memset(ans,0,sizeof ans); cnt=0;}
void ins(char *str,int id){
int len=strlen(str), p=0;
for(int i=0;i<len;i++){
int v=str[i]-'a';
if(!c[p][v]) c[p][v]=++cnt;
p=c[p][v];}
val[p]=min(val[p],w[id]);
slen[p]=len;}
void build(){
queue <signed> q;
for(int i=0;i<26;i++) if(c[0][i]) fi[c[0][i]]=0, q.push(c[0][i]);
while(!q.empty()){
int u=q.front(); q.pop();
for(int i=0;i<26;i++)
if(c[u][i]) fi[c[u][i]]=c[fi[u]][i], q.push(c[u][i]);
else c[u][i]=c[fi[u]][i];}}
int query(char *s){
int len=strlen(s); int p=0;
for(int i=0;i<len;i++){
p=c[p][s[i]-'a'];
for(int t=p;t&&~val[t];t=fi[t])
msgOccur(slen[t],i,val[t]);}}
} AC;
int n; char p[N]; string mp[N]; signed main(){
scanf("%lld",&n);
memset(p,0,sizeof p); AC.init();
for(int i=1;i<=n;i++) {
scanf("%s%lld",p,&w[i]);
AC.ins(p,i);
mp[i]=p;
//slen[i]=strlen(p);
}
AC.build();
scanf("%s",p);
memset(f,0x3f,sizeof f);
f[0]=0;
int ans=AC.query(p);
int len=strlen(p);
cout<<(f[len]>=len*1000000000?-1:f[len])<<endl;
}

最新文章

  1. 给RecyclerView实现的GridView加上HeaderView和FooterView
  2. XCODE多行代码缩进快捷键
  3. POJ2418——Hardwood Species(map映射)
  4. The 10 Most Important Security Controls Missing in JavaEE--reference
  5. 关于基于.net的WEB程序开发所需要的一些技术归纳
  6. Fancybox——学习(1)
  7. Android实现左右滑动指引效果
  8. &lt;C++Primer&gt;第四版 阅读笔记 第二部分 “容器和算法”
  9. iOS多款源码分享
  10. C#操作MongoDB的简单实例
  11. HI3531的DDR3配置流程
  12. Linux 命令整理-ps
  13. cvte春招测试面试记录
  14. elasticsearch 的内存JVM和GC相关问题
  15. python的类和对象——类的静态字段番外篇
  16. 模板学习实践三 functor
  17. [Linux.NET]在CentOS 7.x中编译方式安装Nginx
  18. bzoj3675
  19. window.open 和 location.href 区别
  20. java thread start() 和 run() 区别

热门文章

  1. git系列之---码云gitee 添加SHH公钥
  2. iOS开发 - 在SwiftUI中显示模态视图
  3. 12-Factor与云原生Part2
  4. Windows、Linux之间传输文件的几种方式
  5. CentOS安装图解及配置
  6. 小白的linux笔记11:放弃gitbook,转战Sphinx
  7. 纪中17日T2 2322. capacitor
  8. ABP前端-关于不同按钮调用同一事件传入的参数变为相同的数据
  9. PS_0001:改变图片颜色 填充颜色
  10. nunjucks模板设计一个页面