给出两个字符串(不长于1000),求最长公共子序列,要求:从每个串中取必须取连续k (1<=k<=100)个数

【LCS】一开始自己想用DP加一维[len]用来表示当前已经取了连续len个值,但是1000*1000*100肯定超时,而且这道题的时限779ms是什么鬼

然后想求LCS有没有像LIS一样优化到nlogn的算法,百度一下,还真有【戳这里跳转】,但是基于这个算法来求这道题始终没有什么思路。

还是回到原点设dp[i][j]为第一个字符串到第i位,第二个字符串到第j位,的最大匹配数

不能匹配的时候:dp[i][j]=max( dp[i-1][j] , dp[i][j-1] )

可以匹配的时候:dp[i][j]=max( dp[i][j] , dp[i-p][j-p]+p ) 其中p>=k

代码链接

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<sstream>
#define eps 1e-9
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,T,ans,big,cas,num,len;
bool flag;
char a[],b[];
int dp[][],lena,lenb,p;
int main()
{
while(scanf("%d",&k),k)
{
scanf("%s",a);lena=strlen(a);
scanf("%s",b);lenb=strlen(b);
memset(dp,,sizeof(dp));
for (i=;i<=lena;i++)
{
for (j=;j<=lenb;j++)
{
dp[i][j]=max(dp[i][j-],dp[i-][j]);
for (p=; i-p>= && j-p>= && a[i-p]==b[j-p] ; p++)
{
if (p>=k)
{
dp[i][j]=max(dp[i][j],dp[i-p][j-p]+p);
}
}
}
}
printf("%d\n",dp[lena][lenb]);
}
return ;
}

最新文章

  1. Python基础面向对象成员
  2. 决策树的python实现
  3. 【CodeForces 604B】F - 一般水的题1-More Cowbe
  4. View的缩放操作--CGAffineTransformMakeScale:
  5. JAVA中抽象类的一些总结
  6. ionic cordova file download and load
  7. gitbook 制作 beego 参考手册
  8. js与jquery获取父元素,删除子元素的不同方法
  9. RHEL4 i386下安装rdesktop【原创】
  10. rsyslog+LogAnalyzer 日志收集
  11. HDU Group
  12. gRPC官方快速上手学习笔记(c#版)
  13. VS背景设置
  14. Spring监听,ApplicationListener
  15. pt站 扫盲贴 面向小白
  16. 图中最短路径的算法--dijiska算法C语言实现
  17. 软件工程_1st weeks
  18. python全栈开发知识点补充for else和while else如果不是除正常以外的其他方式退出循环,那么else语句就会被执行。
  19. HDU2955 01背包
  20. 使用 restTemplate 实现get/post 请求

热门文章

  1. php基础知识【函数】(5)正则preg
  2. 基于Jquery+Ajax+Json实现分页显示
  3. Flask 富文本编辑器
  4. 《学习OpenCV》 第四章 习题六
  5. hdu 1229 超级大水题
  6. Python3 time()
  7. 转:几十种编程语言的快速入门教程- learnxinyminutes.com
  8. Unity3d Web3d资源的动态加载
  9. open和fopen的区别(转)
  10. BZOJ1679: [Usaco2005 Jan]Moo Volume 牛的呼声