题目链接: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. 随性练习:excel中文字和链接存到html文件

    这是一个简单的练习,主要是将excel中文字和链接存到html文件中,并且可通过点击文字直通链接 excel格式如下图示,我这里得excel是07版的,所以用到xlrd模块 代码: import xl ...

  2. 技巧:开启ubuntu系统桌面上的右键进入terminal命令行控制台功能

    $ sudo apt-get install nautilus-open-terminal 执行上述命令,重启. 重启命令: $ sudo reboot 注意:需要联网

  3. Vue 中怎么发起请求(一)

    1.vue 支持开发者引入 jquery 使用 $.ajax() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1.首先,在 package.json 中添加 j ...

  4. leetcode 437. 路径总和 III

    题目描述: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二 ...

  5. 从c到cpp对static 关键字的总结 需要整理下!!!!!!!!!!!!!!!!!!!!!!

    一个完整的程序,在内存中的分布情况如下: 具体分布图     自己看书去!!!!!1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区.会随着作用于退出而释放空间.3.堆区:程序员分配并 ...

  6. SigmoidCrossEntropyLoss

    http://blog.csdn.net/u012235274/article/details/51361290

  7. swing线程机制

    在介绍swing线程机制之前,先介绍一些背景概念. 背景概念 同步与异步:     同步是指程序在发起请求后开始处理事件并等待处理的结果或等待请求执行完毕,在此之前程序被阻塞(block)直到请求完成 ...

  8. pat1044. Shopping in Mars (25)

    1044. Shopping in Mars (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Shop ...

  9. Devexpress Xtrareport 创建主从报表

    效果 xtrareport 布局 From 代码 private DataSet Getdata() { DataSet ds = new DataSet(); //config配置字符串 strin ...

  10. output引用类型

    1.创建存储过程,将参数avg设置为引用参数,可以对参数有反馈作用 ), @avg float output) as select @avg=AVG(price) from goods where g ...