题目链接:http://poj.org/problem?id=2250

解题报告:

1、状态转移方程:

for(i=; i<=len1; i++)
{
for(j=; j<=len2; j++)
{
dp[i][j]=_max(i,j,dp[i-][j-]+same(i-,j-),dp[i-][j],dp[i][j-]);
}
}

2、记录决策

3、反序输出

#include <iostream>
#include <string.h>
#include <cstdio>
#include <algorithm> using namespace std; #define MAXV 110
#define MAXN 35 char stemp[MAXN];
char s1[MAXV][MAXN];
char s2[MAXV][MAXN];///记录单词 int len1,len2;///单词长度
int dp[MAXV][MAXV]; ///dp[i][j]表示s1的前i个单词,和s2的前j个单词,最长公共子单词 int p[MAXV][MAXV]; ///决策,如果s1的第i个单词,和s2的第j个单词相同,则为1,以便输出使用
int pos[MAXV]; ///输出结果
int sum; ///有几个单词 int _max(int i,int j,int a,int b,int c)
{
if(a>b&&a>c)
{
p[i][j]=; ///记录决策
return a;
}
else if(b>a&&b>c)
{
p[i][j]=;
return b;
}
p[i][j]=;
return c;
} int same(int x,int y)
{
if(!strcmp(s1[x],s2[y])) return ;
return ;
} void print(int i,int j)
{
if(p[i][j]==) ///即s1的第i个单词,和s2的第j个单词相同
{
pos[sum++]=i-; ///记录这个单词的位置
print(i-,j-);
}
else if(p[i][j]==)
print(i-,j);
else if(p[i][j]==)
print(i,j-);
} int main()
{
int i,j;
/// Input ///
while(scanf("%s",stemp)!=EOF)
{
len1=len2=;
strcpy(s1[len1++],stemp);
while()
{
scanf("%s",stemp);
if(!strcmp(stemp,"#")) break;
strcpy(s1[len1++],stemp);
} while()
{
scanf("%s",stemp);
if(!strcmp(stemp,"#")) break;
strcpy(s2[len2++],stemp);
} /// DP ///
memset(dp,,sizeof(dp));
memset(p,,sizeof(p)); for(i=; i<=len1; i++)
{
for(j=; j<=len2; j++)
{
dp[i][j]=_max(i,j,dp[i-][j-]+same(i-,j-),dp[i-][j],dp[i][j-]);
}
} /// Output ///
sum=;
print(len1,len2);
for(i=sum-; i>=; i--) ///反序输出
printf("%s ",s1[pos[i]]);
puts(""); }
return ;
}

最长公共单词,类似LCS,(POJ2250)的更多相关文章

  1. 动态规划经典——最长公共子序列问题 (LCS)和最长公共子串问题

    一.最长公共子序列问题(LCS问题) 给定两个字符串A和B,长度分别为m和n,要求找出它们最长的公共子序列,并返回其长度.例如: A = "HelloWorld"    B = & ...

  2. 【实习记】2014-08-29算法学习Boyer-Moore和最长公共子串(LCS)

        昨天的问题方案一:寻找hash函数,可行性极低.方案二:载入内存,维护成一个守护进程的服务.难度比较大.方案三:使用前5位来索引,由前3位增至前5位唯一性,理论上是分拆记录扩大100倍,但可以 ...

  3. 最长公共子序列问题 (LCS)

    给定两个字符串S和T.求出这两个字符串最长的公共子序列的长度. 输入: n=4 m=4 s="abcd" t="becd" 输出: 3("bcd&qu ...

  4. 动态规划法(十)最长公共子序列(LCS)问题

    问题介绍   给定一个序列\(X=<x_1,x_2,....,x_m>\),另一个序列\(Z=<z_1,z_2,....,z_k>\)满足如下条件时称为X的子序列:存在一个严格 ...

  5. 【Luogu P1439】最长公共子序列(LCS)

    Luogu P1439 令f[i][j]表示a的前i个元素与b的前j个元素的最长公共子序列 可以得到状态转移方程: if (a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; d ...

  6. 最长公共子序列(LCS)、最长递增子序列(LIS)、最长递增公共子序列(LICS)

    最长公共子序列(LCS) [问题] 求两字符序列的最长公共字符子序列 问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...

  7. 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题

    先要搞明白:最长公共子串和最长公共子序列的区别.    最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,L ...

  8. 最长公共子序列(LCS)和最长递增子序列(LIS)的求解

    一.最长公共子序列 经典的动态规划问题,大概的陈述如下: 给定两个序列a1,a2,a3,a4,a5,a6......和b1,b2,b3,b4,b5,b6.......,要求这样的序列使得c同时是这两个 ...

  9. 05_最长公共子序列问题(LCS)

    问题来源:刘汝佳<算法竞赛入门经典--训练指南> P60 问题7: 问题描述:给两个子序列A和B,求长度最大的公共子序列.比如1,5,2,6,8,和2,3,5,6,9,8,4的最长公共子序 ...

随机推荐

  1. C3算法 和 super

    一. Python的继承  多继承 子类继承父类. 继承是为了节省开发时间.提高开发效率 代码得到了重(chong)用 一个类可以拥有多个父类 lass shen_xian: # 定义一个神仙类 de ...

  2. SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape错误原因及解决方法

    用Python打开文件: with open('C:\Users\PINPIN\test\file1.txt','r') as f2: pass 运行后直接就报错了: File "<i ...

  3. 转 python 随机走动的模拟

    https://blog.csdn.net/python2014/article/details/21231971 麻省理工的随机走动模块,还不错,三天搞懂了,不过懂得不彻底.   记录下修改的代码 ...

  4. Mockjs详细使用说明

    Mock.js 是一款前端开发中拦截Ajax请求再生成随机数据响应的工具.可以用来模拟服务器响应. 优点是非常简单方便, 无侵入性, 基本覆盖常用的接口数据类型. 在我们的生产实际中,后端的接口往往是 ...

  5. Java-IO读写文件简单操作

    Java中读写文件的关键在于节点流和处理流的的选取上,而节点流和处理流又分为面向字节.面向字符两种处理模式,因此,需要根据实际的情况选择合适的处理模式,一般而言,往往尽量尝试使用面向字符的处理模式,如 ...

  6. idea编译golang插件总结

    由于使用习惯了Idea 和vim插件.于是下载了idea的go插件并安装,可惜不支持go1.4 ,官方的go插件版本太低 133.326 — 133.9999 .只能手动编译 按照这个教程就可以 ht ...

  7. pat06-图5. 旅游规划(25)

    06-图5. 旅游规划(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该 ...

  8. 【client】与【offset】

    上面主要区分了[offset]和[client]开头的各个属性的意义,下面这张图是转载的,又加入了[scroll]开头的,和元素本身的[style] clientWidth   是对象看到的宽度(不含 ...

  9. anaular js loadding效果

    以前用的jquery的时候,用ajax实现,比较好弄,下面是angularjs的方式: //body下面增加div <div data-loading></div> //dir ...

  10. 在项目引用里添加上对Microsoft Word 11.0 object library的引用

    private void button1_Click(object sender, System.EventArgs e) { //调用打开文件对话框获取要打开的文件WORD文件,RTF文件,文本文件 ...