还想用hash记录……果然是天真。lcs转移比较简单,每次增加1。每次找是当前-1的就行了。

 #include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <climits>
#include <complex>
#include <fstream>
#include <cassert>
#include <cstdio>
#include <bitset>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <ctime>
#include <set>
#include <map>
#include <cmath> using namespace std; const int mod = ;
const int maxn = ;
char a[maxn];
char b[maxn];
int dp[maxn][maxn];
int fa[mod];
int na, nb; int main() {
// freopen("in", "r", stdin);
while(~scanf("%s %s", a, b)) {
memset(dp, , sizeof(dp));
memset(fa, -, sizeof(fa));
na = strlen(a);
nb = strlen(b);
for(int i = ; i < na; i++) {
for(int j = ; j < nb; j++) {
if(a[i] == b[j]) {
if(dp[i][j] + > max(dp[i][j+], dp[i+][j])) {
dp[i+][j+] = dp[i][j] + ;
// int cur = (((i + 1) * 59) % mod + ((j + 1) * 61) % mod) % mod;
// int pre = ((i * 59) % mod + (j * 61) % mod) % mod;
// fa[cur][0] = pre;
// fa[cur][1] = i;
// ii = cur;
}
else dp[i+][j+] = max(dp[i][j+], dp[i+][j]);
}
else {
dp[i+][j+] = max(dp[i][j+], dp[i+][j]);
}
}
}
int ii = na;
int jj = nb;
char st[maxn];
int top = ;
while(dp[ii][jj]) {
if(dp[ii][jj] == dp[ii-][jj]) ii--;
else if(dp[ii][jj] == dp[ii][jj-]) jj--;
else {
ii--, jj--;
st[top++] = a[ii];
} }
while(top) printf("%c", st[--top]);
printf("\n");
}
return ;
}

LCS记录路径的更多相关文章

  1. HDU 1503 Advanced Fruits(LCS+记录路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=1503 题意: 给出两个串,现在要确定一个尽量短的串,使得该串的子串包含了题目所给的两个串. 思路: 这道题目就是 ...

  2. HDU1503(LCS,记录路径)

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  3. F - LCS 题解(最长公共子序列记录路径)

    题目链接 题目大意 给你两个字符串,任意写出一个最长公共子序列 字符串长度小于3e3 题目思路 就是一个记录路径有一点要注意 找了好久的bug 不能直接\(dp[i][j]=dp[i-1][j-1]+ ...

  4. Educational DP Contest F - LCS (LCS输出路径)

    题意:有两个字符串,求他们的最长公共子序列并输出. 题解:首先跑个LCS记录一下dp数组,然后根据dp数组来反着还原路径,只有当两个位置的字符相同时才输出. 代码: char s[N],t[N]; i ...

  5. poj1417 带权并查集 + 背包 + 记录路径

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2713   Accepted: 868 Descrip ...

  6. POJ 3436:ACM Computer Factory(最大流记录路径)

    http://poj.org/problem?id=3436 题意:题意很难懂.给出P N.接下来N行代表N个机器,每一行有2*P+1个数字 第一个数代表容量,第2~P+1个数代表输入,第P+2到2* ...

  7. hdu 1026 Ignatius and the Princess I (bfs+记录路径)(priority_queue)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1026 Problem Description The Princess has been abducted ...

  8. hdu1074 状压DP、栈实现记录路径

    题意:给了几门学科作业.它们的截止提交期限(天数).它们的需要完成的时间(天数),每项作业在截止日期后每拖延一天扣一学分,算最少扣的学分和其完成顺序. 一开始做的时候,只是听说过状态压缩这个神奇的东西 ...

  9. hdu 1074(状态压缩dp+记录路径)

    题意:给了n个家庭作业,然后给了每个家庭作业的完成期限和花费的实践,如果完成时间超过了期限,那么就要扣除分数,然后让你找出一个最优方案使扣除的分数最少,当存在多种方案时,输出字典序最小的那种,因为题意 ...

随机推荐

  1. LAMP一键安装包-CentOS 5/6下自动编译安装Apache,MySQL,PHP

    http://www.centos.bz/lamp/ 此安装包已经不再维护,请使用新版http://www.centos.bz/ezhttp/. 适用环境: 系统支持:CentOS-5 (32bit/ ...

  2. JavaScript之arguments对象讲解

    javascript的arguments对象类似于PHP的extract()函数实现. 在不确定函数参数个数的情况下,可以通过arguments访问参数,并以索引0为起始. function sayH ...

  3. ios瀑布流

    http://blog.csdn.net/shenjx1225/article/details/9037631

  4. 利用dsniff的tcpkill杀TCP连接

    利用dsniff的tcpkill杀TCP连接 Linux连接久久不能释放的现象不常见,但偶然也会发生.进程虽不复存在,但是客户端的连接咬定青山不放松,死活也不肯吐出连接,导致重启进程时因操作系统判断监 ...

  5. JavaScript面向对象+Array的用法及字符串组合+动态建立锚点

    脚本部分: function school(sName,sDddress,sPhone,sMail) { this.SName = sName; this.SAddress = sDddress; t ...

  6. 【leetcode】Multiply Strings(middle)

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  7. iOS验证码倒计时(GCD实现)

    + (void)verificationCode:(void(^)())blockYes blockNo:(void(^)(id time))blockNo { __block ; //倒计时时间 d ...

  8. POJ 2017

    #include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("t ...

  9. POJ 1940

    #include <iostream> #include <iomanip> #define MAXN 1000 using namespace std; struct nod ...

  10. Java获取最后插入MySQL记录的自增ID值方法

    方法一: String sql = "INSERT INTO users (username,password,email) VALUES (?,?,?);"; PreparedS ...