String
来源:互联网 发布:java的applet过时了吗 编辑:程序博客网 时间:2024/05/17 04:33
Description
有两种字符串S,T。长度分别为n,m。现在需要在S里面有序地选出k个子串,且在T中出现的顺序与这k个子串的顺序相同。问这k个子串最大的长度和
n,m<=1000,k<=10
Solution
题意简洁系列。
顺带一说,字串不可重。
显然Dp。
三维可能会算重,多开一维,表示前面是不是连续一段匹配的。
然后就没有了。
COde
#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define N 1005using namespace std;int n,m,k,f[N][N][11][2];char s[N],st[N];int main() { freopen("string.in","r",stdin); freopen("string.out","w",stdout); scanf("%d%d%d",&n,&m,&k); scanf("%s",s+1);scanf("%s",st+1); fo(i,1,n) fo(j,1,m) fo(l,1,k) { f[i][j][l][0]=max(f[i-1][j][l][1],f[i][j-1][l][1]); f[i][j][l][0]=max(f[i][j][l][0],max(f[i-1][j][l][0],f[i][j-1][l][0])); if (s[i]==st[j]) { f[i][j][l][1]=f[i-1][j-1][l-1][0]+1; if (s[i-1]==st[j-1]) f[i][j][l][1]= max(f[i][j][l][1],f[i-1][j-1][l][1]+1); } } printf("%d",max(f[n][m][k][0],f[n][m][k][1]));}
0 0
- string
- String
- String
- string
- string
- String
- string
- String
- string
- string
- string
- string
- String
- String
- string
- string +
- String
- String
- 矩形填补
- 关于selector对TextView不起作用的问题
- 如何查看Linux磁盘空间大小
- 11.http 客户端
- 自定义注解
- String
- span 的用法
- iOS学习(十五)Objective-C 方法的覆盖
- SpringMVC
- node.js开发工具--visual studio code
- Initialize List<List<Integer>> in Java 怎么初始化List<List<Integer>>
- Activity,Window和View之间的关系
- 使用gulp-uglify压缩js文件
- 中国的“机器人革命”