time limit per test2 seconds

memory limit per test256 megabytes

inputstandard input

outputstandard output

After returned from forest, Alyona started reading a book. She noticed strings s and t, lengths of which are n and m respectively. As usual, reading bored Alyona and she decided to pay her attention to strings s and t, which she considered very similar.

Alyona has her favourite positive integer k and because she is too small, k does not exceed 10. The girl wants now to choose k disjoint non-empty substrings of string s such that these strings appear as disjoint substrings of string t and in the same order as they do in string s. She is also interested in that their length is maximum possible among all variants.

Formally, Alyona wants to find a sequence of k non-empty strings p1, p2, p3, …, pk satisfying following conditions:

s can be represented as concatenation a1p1a2p2… akpkak + 1, where a1, a2, …, ak + 1 is a sequence of arbitrary strings (some of them may be possibly empty);

t can be represented as concatenation b1p1b2p2… bkpkbk + 1, where b1, b2, …, bk + 1 is a sequence of arbitrary strings (some of them may be possibly empty);

sum of the lengths of strings in sequence is maximum possible.

Please help Alyona solve this complicated problem and find at least the sum of the lengths of the strings in a desired sequence.

A substring of a string is a subsequence of consecutive characters of the string.

Input

In the first line of the input three integers n, m, k (1 ≤ n, m ≤ 1000, 1 ≤ k ≤ 10) are given — the length of the string s, the length of the string t and Alyona’s favourite number respectively.

The second line of the input contains string s, consisting of lowercase English letters.

The third line of the input contains string t, consisting of lowercase English letters.

Output

In the only line print the only non-negative integer — the sum of the lengths of the strings in a desired sequence.

It is guaranteed, that at least one desired sequence exists.

Examples

input

3 2 2

abc

ab

output

2

input

9 12 4

bbaaababb

abbbabbaaaba

output

7

Note

The following image describes the answer for the second sample case:

【题解】





f[i][j][k][0]表示s的前i个字母,t的前j个字母里面符合要求的公共序列为k个,且s[i]和t[j]不是第k个公共序列的最后一个元素的最长序列长度;

f[i][j][k][1]表示s的前i个字母,t的前j个字母里面符合要求的公共序列为k个,且s[i]和t[j]是第k个公共序列的最后一个元素的最长序列长度;

边界:

f[i][j][k][0..1]= 0;

f[1][1][1][1] = (s[1]==t[1]?1:0);

根据s[i]是不是等于s[j]。转移一下就可以了。

看代码吧。

#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int MAXN = 1000 + 20;
const int MAXK = 15; char s[MAXN],t[MAXN]; int n, m, k;
int dp[MAXN][MAXN][MAXK][2]; int main()
{
//freopen("F:\\rush.txt", "r", stdin);
scanf("%d%d%d", &n, &m, &k);
scanf("%s", s + 1);
scanf("%s", t + 1);
if (s[1] == t[1])
dp[1][1][1][1] = 1;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
for (int l = 1; l <= k; l++)
{
if (i == 1 && j == 1)
continue;
if (i == 1)
{
if (s[1] == t[j])
dp[1][j][1][1] = 1;
dp[1][j][1][0] = dp[1][j - 1][1][0];
if (s[1] == t[j - 1])
dp[1][j][1][0] = max(dp[1][j][1][0],dp[1][j - 1][1][1]);
}
else
if (j == 1)
{
if (s[i] == t[1])
dp[i][1][1][1] = 1;
dp[i][1][1][0] = dp[i-1][1][1][0];
if (s[i-1] == t[1])
dp[i][1][1][0] = max(dp[i][1][1][0], dp[i-1][1][1][1]);
}
else
{
if (s[i] == t[j])
{
dp[i][j][l][1] = dp[i - 1][j - 1][l - 1][0]+1;
if (s[i - 1] == t[j - 1])
{
dp[i][j][l][1] = max(dp[i][j][l][1], dp[i - 1][j - 1][l - 1][1] + 1);
dp[i][j][l][1] = max(dp[i][j][l][1], dp[i - 1][j - 1][l][1] + 1);
}
}
dp[i][j][l][0] = max(dp[i - 1][j][l][0], dp[i][j - 1][l][0]);
dp[i][j][l][0] = max(dp[i][j][l][0], dp[i - 1][j - 1][l][0]);
if (s[i] == t[j - 1])
dp[i][j][l][0] = max(dp[i][j][l][0], dp[i][j - 1][l][1]);
if (s[i - 1] == t[j])
dp[i][j][l][0] = max(dp[i][j][l][0], dp[i - 1][j][l][1]);
if (s[i - 1] == s[j - 1])
dp[i][j][l][0] = max(dp[i][j][l][0], dp[i - 1][j - 1][l][1]);
}
}
printf("%d\n", max(dp[n][m][k][0], dp[n][m][k][1]));
return 0;
}

【31.58%】【codeforces 682D】Alyona and Strings的更多相关文章

  1. codeforces 682D D. Alyona and Strings(dp)

    题目链接: D. Alyona and Strings time limit per test 2 seconds memory limit per test 256 megabytes input ...

  2. 【31.58%】【codeforces 719B】 Anatoly and Cockroaches

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  3. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  4. Codeforces 682 D. Alyona and Strings (dp)

    题目链接:http://codeforces.com/contest/682/problem/D 给你两个字符串,求两个字符串中顺序k个的相同子串 长度之和.(注意是子串) dp[i][j][k][0 ...

  5. 【31.72%】【codeforces 604B】More Cowbell

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. 【21.58%】【codeforces 746D】Green and Black Tea

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  7. 【58.33%】【codeforces 747B】Mammoth's Genome Decoding

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  8. 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)

    题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...

  9. 【codeforces 785D】Anton and School - 2

    [题目链接]:http://codeforces.com/contest/785/problem/D [题意] 给你一个长度为n的括号序列; 让你删掉若干个括号之后,整个序列变成前x个括号为左括号,后 ...

随机推荐

  1. oled stm32的spi

    其实各种协议是很重要的,这篇文章就当做我对spi协议的一个整理吧. 必要的spi简介: https://www.cnblogs.com/zengsf/p/7221207.html?utm_source ...

  2. python3 turtle 画国际象棋棋盘

    python3 turtle 画国际象棋棋盘 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan import turt ...

  3. HttpClient证书回调问题解决

    /// <summary>        /// httpclient请求        /// </summary>        /// <param name=&q ...

  4. Spring中@Async用法详解及简单实例

    Spring中@Async用法 引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类 ...

  5. Swift 中异常抛出和四种异常处理

    在Swift中你可以像其他语言一样抛出异常处理异常,今天我们就详细地说说Swift中的异常抛出和处理. 在一开始我们要定义错误或者说是异常,Swift中的一些简单异常可以使用枚举定义,注意这个枚举要继 ...

  6. Python数据结构之树

    二叉树 嵌套列表方式 # coding:utf-8 # 列表嵌套法 def BinaryTree(r): return [r, [], []] def insertLeft(root, newBran ...

  7. 如何在 BitNami 中创建多个 WEB 应用?(转)

    本文最后更新于2015年7月14日,已超过半年没有更新,如果内容失效,请反馈,谢谢! 如您所知,BitNami 为诸多开源 WEB 应用提供集成环境的一键安装解决方案,像著名的开源 WEB 程序 Wo ...

  8. 【solr专题之二】配置文件:solr.xml solrConfig.xml schema.xml 分类: H4_SOLR/LUCENCE 2014-07-23 21:30 1959人阅读 评论(0) 收藏

    1.关于默认搜索域 If you are using the Lucene query parser, queries that don't specify a field name will use ...

  9. 单机/伪分布式Hadoop2.4.1安装文档 2014-07-08 21:16 2275人阅读 评论(0) 收藏

    转载自官方文档,最新版请见:http://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-common/SingleCluster.h ...

  10. 用户之间imp的问题

    今天同事说申请了一个从生产导出的dump文件,须要导入測试库进行測试. 之前做的基本都是本库导出,本库导入的操作,比如:imp test/***@test tables=tbl_fuel file=H ...