acm--pku--1458
2011-05-17 13:11
246 查看
问题描述:
问题地址:http://poj.org/problem?id=1458
查看两个字符串相同子窜的最长长度。
举例子:
Sample Input
Sample Output
问题地址:http://poj.org/problem?id=1458
查看两个字符串相同子窜的最长长度。
举例子:
Sample Input
abcfbc abfcab programming contest abcd mnp
Sample Output
4 2 0
从这个例子中可以看出用简单的动态规划就可以了。状态转移的式子是
if(node1[i-1]==node2[j-1])
{
sum[i][j]=sum[i-1][j-1]+1;
}
else
{
if(sum[i][j-1]>sum[i-1][j])
sum[i][j]=sum[i][j-1];
else
sum[i][j]=sum[i-1][j];
}
全部代码为:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int sum[210][210];
char node1[210];
char node2[210];
int m,n;
int i,j,k;
while(cin>>node1>>node2)
{
//scanf("%s",node1);
// scanf("%s",node2);
// if(node1==""&&node2=="")
// break;
i=0;
while(node1[i]!='\0')i++;
m=i;
i=0;
while(node2[i]!='\0')i++;
n=i;
for(i=0;i<=n;i++)
sum[0][i]=0;
for(i=0;i<=m;i++)
sum[i][0]=0;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(node1[i-1]==node2[j-1])
{
sum[i][j]=sum[i-1][j-1]+1;
}
else
{
if(sum[i][j-1]>sum[i-1][j])
sum[i][j]=sum[i][j-1];
else
sum[i][j]=sum[i-1][j];
}
}
}
// printf("%d\n",sum[m] );
cout<<sum[m] <<endl;
}
return 0;
}
相关文章推荐
- Pku acm 1458 Common Subsequence 动态规划题目解题报告(五)
- Pku acm 1458 Common Subsequence 动态规划解析
- Pku acm 1458 Common Subsequence 题意分析
- Pku acm 1579 Function Run Fun
- acm pku 1045 Bode Plot的计算过程
- 滑雪-PKU ACM 1088
- 初学ACM - 组合数学基础题目PKU 1833
- PKU 2528 POJ 2528 Mayor's posters ( 线段树+离散化 ) ACM 2528 IN PKU
- ACM POJ 1458 Common Subsequence
- acm pku 1218 The drunk jailer的算法分析与实现
- PKU ACM 题目1018 源代码
- PKU ACM 1164 源代码
- pku acm 1321 源码
- pku acm 1005
- Pku acm 1611 The Suspects数据结构题目解题报告(九)---- 并查集的应用
- Pku acm 1423 Big Number 解题报告----求n!的位数
- pku acm 1833 排列
- acm pku 1088 滑雪
- Pku acm 1961 Period数据结构题目解题报告(十九)----kmp算法
- pku 1458 Common Subsecquence(DP)