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. 芯片TPS70925

    TPS70925电源芯片 从上图中可以看出EN脚是使能脚,并且是高使能,低失能. tps70925的典型用法: 这个芯片有很多封装,我们用的是第一个:

  2. dataTable() 与 DataTable() 的差别与处理方式

    jQuery dataTable的初始化有两种方式: var dataTable = $('#example').dataTable(); 与 var DataTable = $('#example' ...

  3. screenX, clientX, pageX

    screenX:鼠标相对屏幕左上角的水平偏移量. clientX:鼠标相对于浏览器左上角的水平偏移量,会随着滚动条的移动而移动. pageX:鼠标相对浏览器左上角的水平偏移量.不会随着滚动条的移动而移 ...

  4. jtag引脚

    如果不能下载,可能原因也许是电量不足了... 在电力不足的时候,仿真也不能进行... ///////////////////////////////////////////////////////// ...

  5. php 如何写一个自己项目的安装程序

    版权声明:此篇文章只是用作笔记,如果版权冲突,请邮件通知一下(15201155501@163.com) https://blog.csdn.net/shenpengchao/article/detai ...

  6. ArcEngine数据删除几种方法和性能比较

    转自原文 ArcEngine数据删除几种方法和性能比较 一.  几种删除方法代码 1.  查询结果中删除 private void Delete1(IFeatureClass PFeatureclas ...

  7. CSDN日报20170406 ——《代码非常烂,所以离职。》

    [程序人生]代码非常烂.所以离职? 作者:stormzhang 我在面试的时候一般会问这么一个问题:你为什么离职? 当中有不少同学会提到这么一个原因.现在的项目代码太烂了,前人留下了非常多坑,我实在忍 ...

  8. 数据结构与算法实验题 6.1 s_sin’s bonus

    数据结构与算法实验题 6.1 s_sin's bonus ★实验任务 正如你所知道的 s_sin 是一个非常贪玩的人 QAQ(如果你非常讨厌他请直接从第二段开 始看),并且令人感到非常遗憾的是,他是一 ...

  9. 【record】11.14..11.20

    balabala

  10. 排查一般MySQL性能问题

    排查一般MySQL性能问题,通常要记录下面几项信息: 1.mysql> show processlist; 2.mysql> show engine innodb status\G 3.表 ...