【31.58%】【codeforces 682D】Alyona and Strings
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的更多相关文章
- codeforces 682D D. Alyona and Strings(dp)
题目链接: D. Alyona and Strings time limit per test 2 seconds memory limit per test 256 megabytes input ...
- 【31.58%】【codeforces 719B】 Anatoly and Cockroaches
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- 【 BowWow and the Timetable CodeForces - 1204A 】【思维】
题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...
- Codeforces 682 D. Alyona and Strings (dp)
题目链接:http://codeforces.com/contest/682/problem/D 给你两个字符串,求两个字符串中顺序k个的相同子串 长度之和.(注意是子串) dp[i][j][k][0 ...
- 【31.72%】【codeforces 604B】More Cowbell
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【21.58%】【codeforces 746D】Green and Black Tea
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【58.33%】【codeforces 747B】Mammoth's Genome Decoding
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 【codeforces 785D】Anton and School - 2
[题目链接]:http://codeforces.com/contest/785/problem/D [题意] 给你一个长度为n的括号序列; 让你删掉若干个括号之后,整个序列变成前x个括号为左括号,后 ...
随机推荐
- 如何使用 PyCharm 将代码上传到GitHub上(详细图解)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一丶说明 测试条件:需要有GitHub账号以及在本地安装了Git工具,无论是Linux环境还是Windows都是一样的 如果还没有 ...
- Day2:模块初识
一.模块(库) 别人写好的一堆功能,封装起来,你直接导入就可以用,就不用自己再写一次,使用import方法 二.分类:标准库与第三方库 标准库:免安装,导入即可使用,最常用的一些功能 第三方库:需要下 ...
- simple-word-Highlighter 支持网址正则表达式匹配
- 【AtCoder ABC 075 A】One out of Three
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用map轻松搞定 [代码] #include <bits/stdc++.h> using namespace std; ...
- disabled的值无法传递到action层
假设想让表单不可输入的状态,我将表单设置为了: style="cursor:not-allowed;" disabled 可是这样设置之后就发现,在后台的action怎么都没有办法 ...
- java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)
首先申明,本人实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis 框架,maven管理.其实如果支付,不需要my ...
- 删除GitHub上项目中的某个文件
原文地址 https://www.jianshu.com/p/242412b43ca5 1.首先在本地中更新有该项目的最新包 即确保本地项目和git上的项目内容保持同步(git pull拉取项目代码) ...
- 【u106】3D模型
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 一座城市建立在规则的n×m网格上,并且网格均由1×1正方形构成.在每个网格上都可以有一个建筑,建筑由若 ...
- 多线程之线程通信条件Condition二
接上一篇,实现Condition三个条件,有这样一个应用: 1. 有三个进程,第一个进程运行1次,第二个进程运行2次,第三个进程运行3次: 2. 先运行第二个进程,然后第一个,然后第三个: 3. 依 ...
- jquery简单使用(看教程:快全有实例)(固定样式:$().val()设置属性,$().click()设置方法)
jquery简单使用(看教程:快全有实例)(固定样式:$().val()设置属性,$().click()设置方法) 一.总结 1.jquery不懂之处直接看教程,案例都有,有简单又快 2.jquery ...