hdu1159 Common Subsequence--DP
2016-03-21 10:58
489 查看
原题链接: http://acm.hdu.edu.cn/showproblem.php?pid=1159
一:原题链接
[align=left]Problem Description[/align]
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = <x1, x2, ..., xm> another sequence Z = <z1, z2, ..., zk> is a subsequence of X if there exists a strictly increasing
sequence <i1, i2, ..., ik> of indices of X such that for all j = 1,2,...,k, xij = zj. For example, Z = <a, b, f, c> is a subsequence of X = <a, b, c, f, b, c> with index sequence <1, 2, 4, 6>. Given two sequences X and Y the problem is to find the length of
the maximum-length common subsequence of X and Y.
The program input is from a text file. Each data set in the file contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct. For each set of data the program prints on the standard
output the length of the maximum-length common subsequence from the beginning of a separate line.
[align=left]Sample Input[/align]
abcfbc abfcab
programming contest
abcd mnp
[align=left]Sample Output[/align]
4
2
0
二:分析理解
给出两个字符串,求两个字符串的最长公共字串。
可以看出:
F[i][j]=F[i-1][j-1]+1;(a[i]==b[j])
F[i][j]=max(F[i-1][j],F[i][j-1]);(a[i]!=b[j])
三:AC代码
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
char a[1001] = "#";
char b[1001] = "#";
int dp[1005][1005] = { 0 };
int main()
{
while (~scanf("%s%s", a + 1, b + 1))//加上~,不然超时,醉了
{
int a_len = strlen(a) - 1;
int b_len = strlen(b) - 1;
for (int i = 1; i <= a_len; i++)
{
for (int j = 1; j <= b_len; j++)
{
if (a[i] == b[j])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
}
}
printf("%d\n", dp[a_len][b_len]);
}
return 0;
}
一:原题链接
[align=left]Problem Description[/align]
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = <x1, x2, ..., xm> another sequence Z = <z1, z2, ..., zk> is a subsequence of X if there exists a strictly increasing
sequence <i1, i2, ..., ik> of indices of X such that for all j = 1,2,...,k, xij = zj. For example, Z = <a, b, f, c> is a subsequence of X = <a, b, c, f, b, c> with index sequence <1, 2, 4, 6>. Given two sequences X and Y the problem is to find the length of
the maximum-length common subsequence of X and Y.
The program input is from a text file. Each data set in the file contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct. For each set of data the program prints on the standard
output the length of the maximum-length common subsequence from the beginning of a separate line.
[align=left]Sample Input[/align]
abcfbc abfcab
programming contest
abcd mnp
[align=left]Sample Output[/align]
4
2
0
二:分析理解
给出两个字符串,求两个字符串的最长公共字串。
可以看出:
F[i][j]=F[i-1][j-1]+1;(a[i]==b[j])
F[i][j]=max(F[i-1][j],F[i][j-1]);(a[i]!=b[j])
三:AC代码
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
char a[1001] = "#";
char b[1001] = "#";
int dp[1005][1005] = { 0 };
int main()
{
while (~scanf("%s%s", a + 1, b + 1))//加上~,不然超时,醉了
{
int a_len = strlen(a) - 1;
int b_len = strlen(b) - 1;
for (int i = 1; i <= a_len; i++)
{
for (int j = 1; j <= b_len; j++)
{
if (a[i] == b[j])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
}
}
printf("%d\n", dp[a_len][b_len]);
}
return 0;
}
相关文章推荐
- 300. Longest Increasing Subsequence
- JS生成GUID和传参乱码
- UITableViewCell的四种样式
- 解决php5.3中Deprecated: Assigning the return value of new by reference is deprecated in报错
- {html_options options=$item.options selected=$item.value}
- 62. Unique Paths
- QuickStart with RHOS(Red Hat OpenStack) Folsom Preview
- smarty truncate 用法 {$articleTitle|truncate:30:\"...\":true}
- warning: incompatible implicit declaration of built-in function ‘strlen’
- iOS开发-代替UDID被弃用和UUID使用缺陷的解决方案
- 在android的spinner中,实现key(id)和Value的取值
- Qt编程中,Ui文件如何被利用
- 背水一战 Windows 10 (3) - UI: 窗口全屏, 窗口尺寸
- UITextField总结
- String、StringBuffer、StringBuilder
- UIButton 防止多按钮同时按下
- UIButton的setImageEdgeInsets和setTitleEdgeInsets
- 对iOS 9 新增的控件 UIStackView 官方文档的翻译 第三部分
- priority queue
- UIBarButtonItem 左边间隙过大 解决方案