2019.03.01 bzoj3075: [Usaco2013]Necklace(kmp+dp)
传送门
题意简述:给出S,TS,TS,T两个字串,∣S∣≤10000,∣T∣≤1000|S|\le10000,|T|\le1000∣S∣≤10000,∣T∣≤1000,问至少从SSS中删去几个字符能够使得TTT不是修改后的SSS的字串。
思路:
考虑正难则反转化问题。
只需要求所有使得TTT不为SSS字串的SSS的字符数最大值。
于是设计状态fi,jf_{i,j}fi,j表示SSS中前iii个字符匹配上TTT的第jjj位可保留的最多字符数。
然后考虑当前这一位删不删转移就行了。
可以用kmpkmpkmp来优化转移,时间复杂度O(nm)O(nm)O(nm)
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
const int N=10005,M=1005;
char s[N],t[M];
int tmp=0,ans=0,f[2][M],n,m,fail[M];
int main(){
scanf("%s%s",s+1,t+1),n=strlen(s+1),m=strlen(t+1);
for(ri i=1,j=0;i<=m;++i){
while(j&&t[i+1]!=t[j+1])j=fail[j];
fail[i+1]=t[i+1]==t[j+1]?++j:0;
}
memset(f[tmp],-1,sizeof(f[tmp]));
f[tmp][0]=0;
for(ri i=1;i<=n;++i){
memset(f[tmp^1],-1,sizeof(f[tmp^1]));
for(ri j=0,k;j<m;++j)if(~f[tmp][j]){
f[tmp^1][j]=max(f[tmp^1][j],f[tmp][j]);
k=j;
while(k&&s[i]!=t[k+1])k=fail[k];
if(s[i]==t[k+1])++k;
f[tmp^1][k]=max(f[tmp^1][k],f[tmp][j]+1);
}
tmp^=1;
}
for(ri i=0;i<m;++i)ans=max(ans,f[tmp][i]);
cout<<n-ans;
return 0;
}
2019.03.01 bzoj3075: [Usaco2013]Necklace(kmp+dp)的更多相关文章
- 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)
传送门 题解可以参见zjjzjjzjj神仙的,写的很清楚. 代码: #include<bits/stdc++.h> #define ri register int using namesp ...
- 2021.11.09 P3426 [POI2005]SZA-Template(KMP+DP)
2021.11.09 P3426 [POI2005]SZA-Template(KMP+DP) https://www.luogu.com.cn/problem/P3426 题意: 你打算在纸上印一串字 ...
- [HDOJ5763]Another Meaning(KMP, DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5763 题意:给定两个字符串a和b,其中a中的字符串如果含有子串b,那么那部分可以被替换成*.问有多少种 ...
- 2019.03.28 bzoj3325: [Scoi2013]密码(manacher+模拟)
传送门 题意: 现在有一个nnn个小写字母组成的字符串sss. 然后给你nnn个数aia_iai,aia_iai表示以sis_isi为中心的最长回文串串长. 再给你n−1n-1n−1个数bib_ ...
- 2019.01.24 bzoj3125: CITY(轮廓线dp)
传送门 题意简述:给一个n∗mn*mn∗m的网格图,有的格子不能走,有的格子只能竖着走,有的格子只能横着走,问用一条回路覆盖所有能走的格子的方案数. 思路: 就是简单的轮廓线dpdpdp加了一点限制而 ...
- 2019.01.24 bzoj2310: ParkII(轮廓线dp)
传送门 题意简述:给一个m*n的矩阵,每个格子有权值V(i,j) (可能为负数),要求找一条路径,使得每个点最多经过一次且点权值之和最大. 思路:我们将求回路时的状态定义改进一下. 现在由于求的是路径 ...
- 2019.01.23 hdu3377 Plan(轮廓线dp)
传送门 题意简述:给一个n*m的带权矩阵,求从左上角走到右下角的最大分数,每个格子只能经过最多一次,n,m≤9n,m\le9n,m≤9. 思路: 考虑轮廓线dpdpdp,但这道题并没有出现回路的限制因 ...
- 2019.01.23 hdu1964 Pipes(轮廓线dp)
传送门 题意简述:给一个没有障碍的网格图,任意两个格子连通需要花费一定代价,现在求一条覆盖所有格子的哈密顿回路的总权值的最小值. 思路: 跟这道题一毛一样,除了把求和变成求最小值以外. 代码: #in ...
- hdu_3336: Count the string(KMP dp)
题目链接 题意:求给定字符串中,可以与某一前缀相同的所有子串的数量 做这道题需要明白KMP算法里next[]数组的意义 首先用一数组nex[](这里与之前博客中提到的next明显不同)存储前缀后缀最长 ...
随机推荐
- JAVA 异常类型结构分析
JAVA 异常类型结构分析 Throwable 是所有异常类型的基类,Throwable 下一层分为两个分支,Error 和 Exception. Error 和 Exception Error Er ...
- VS调试提示“无法启动程序,“...exe”。系统找不到指定文件
当VS调试提示上图所示的警告时,常用的方法是检查“项目”-“属性”-“配置属性”-“常规”-“输出目录”里的路径 项目”-“属性”-“配置属性”-“链接器”-“常规”-“输出文件”里的路径,是否一致, ...
- Python-实列
"""题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再 ...
- vue打包
npm installnpm run devnpm run build @types/node npm install --save @types/node npm install @types/no ...
- Java笔记Spring(三)
spring-beans和spring-context 一.注解 1.自定义一个注解 @Target({ElementType.METHOD}) @Retention(RetentionPolicy. ...
- linux git clone 指定分支
git clone -b develop http://192.168.11.11:8888/scm/git/vrmmo 指定下载develop分支
- RobotFramework - AppiumLibrary 之元素定位
一.介绍 AppiumLibrary 是 Robot Framework 的App测试库. 它使用Appium 与Android 和 iOS应用程序进行通信,类似于Selenium WebDriver ...
- 四张图带你了解Tomcat系统架构
一.Tomcat顶层架构 先上一张Tomcat的顶层结构图(图A),如下: Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service ...
- 使用IntelliJ IDEA创建简单的Dubbo实例
这个博客是在https://blog.csdn.net/Crazer_cy/article/details/80397649篇文章上的基础上,自己学习用的. Zookeeper为dubbo的注册中心, ...
- react-native-pushy 热更新
教程来源于官网: 准备工作 添加热更新功能 发布应用 说明: 在往 pushy 发布了安装包之后,后续都是通过下面 2个命令来发布 热更新版本的,而不是再次发布安装包, 在使用热更新服务更新版本的时候 ...