BZOJ3075 : [Usaco2013]Necklace
2024-09-26 06:29:26
首先对b串做kmp求出nxt数组。
设f[i][j]表示考虑了a的前i个字符,在b中匹配到了j的最长长度,按照kmp算法直接转移即可。
$ans=n-\max(f[n][j])$。
时间复杂度$O(nm)$。
#include<cstdio>
#include<cstring>
#define N 1010
char a[10010],b[N];int n,m,i,j,k,x,nxt[N],f[2][N],ans;
inline void up(int&a,int b){if(a<b)a=b;}
int main(){
scanf("%s%s",a+1,b+1),n=strlen(a+1),m=strlen(b+1);
for(i=2;i<=m;nxt[i++]=j){
while(j&&b[j+1]!=b[i])j=nxt[j];
if(b[j+1]==b[i])j++;
}
for(j=1;j<m;j++)f[0][j]=-1;
for(i=0;i<n;i++,x^=1){
for(j=0;j<m;j++)f[x^1][j]=-1;
for(j=0;j<m;j++)if(~f[x][j]){
up(f[x^1][j],f[x][j]);
for(k=j;k&&b[k+1]!=a[i+1];k=nxt[k]);
if(b[k+1]==a[i+1])k++;
up(f[x^1][k],f[x][j]+1);
}
}
for(j=0;j<m;j++)up(ans,f[x][j]);
return printf("%d",n-ans),0;
}
最新文章
- SQL Server数据库代码指令简介
- HDU1011 树形DP
- Mysql创建用户的三种基本方法
- ZOJ-2562 More Divisors 反素数
- 【10】令operator=返回一个reference to *this
- 初窥图像识别与k-means算法
- window.location的路径
- [Luogu3121][USACO15FEB]审查Censoring
- c#实现用SQL池(多线程),定时批量执行SQL语句 【转】
- C# 设置Excel超链接(二)
- jquery iCheck的全选和获取value
- 10 Rules of Highly Successful Project Management
- 【Servlet】Java Serlvet Filter 过滤器
- Android图片异步加载
- Jenkins多选项框使用
- linux主机之间无密钥ssh访问
- VS2010单元测试入门实践教程
- 鲁棒图(Robustness Diagram)
- 51nod 1442 士兵的旅行
- php post提交xml文件
热门文章
- C++中的vector使用范例
- [官方说明] 为什么ES4要分成两阶段?
- Smarty s01
- 【Markdown】notepad++ 支持 markdown语法、预览
- 2.11 2D平面最近点对问题[closest pair problem]
- Android drawable的自动缩放
- 数据库路由器 ICX
- C++ 通过WIN32 API 获取逻辑磁盘详细信息
- 【JAVA、C++】 LeetCode 008 String to Integer (atoi)
- sublime 实用 快捷键