博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LCS(打印全路径) POJ 2264 Advanced Fruits
阅读量:7106 次
发布时间:2019-06-28

本文共 1535 字,大约阅读时间需要 5 分钟。

 

题意:两个字符串结合起来,公共的字符只输出一次

分析:LCS,记录每个字符的路径

 

代码:

/*    LCS(记录路径)模板题:            用递归打印路径:)*/#include 
#include
#include
#include
#include
using namespace std;const int N = 1e2 + 10;const int INF = 0x3f3f3f3f;char s[N], t[N];int dp[N][N];int fa[N][N];void print(int x, int y)  { if (!x && !y) return ; if (fa[x][y] == 0) { print (x-1, y-1); printf ("%c", s[x-1]); } else if (fa[x][y] == -1) { print (x-1, y); printf ("%c", s[x-1]); } else { print (x, y-1); printf ("%c", t[y-1]); }}void LCS(void) { int lens = strlen (s), lent = strlen (t); memset (dp, 0, sizeof (dp)); memset (fa, 0, sizeof (fa)); for (int i=0; i<=lens; ++i) fa[i][0] = -1; for (int i=0; i<=lent; ++i) fa[0][i] = 1; for (int i=1; i<=lens; ++i) { for (int j=1; j<=lent; ++j) { if (s[i-1] == t[j-1]) { dp[i][j] = dp[i-1][j-1] + 1; fa[i][j] = 0; } else if (dp[i-1][j] >= dp[i][j-1]) { dp[i][j] = dp[i-1][j]; fa[i][j] = -1; } else { dp[i][j] = dp[i][j-1]; fa[i][j] = 1; } } } // printf ("%d\n", dp[lens][lent]); print (lens, lent); puts ("");}int main(void) { while (scanf ("%s %s", &s, &t) == 2) { LCS (); } return 0;}

  

转载于:https://www.cnblogs.com/Running-Time/p/4466906.html

你可能感兴趣的文章
第一篇博客
查看>>
玩转K8S之如何访问业务应用(Traefik-ingress篇)
查看>>
装修红宝书
查看>>
实时同步数据-数据库实时同步软件-mysql实时同步SyncNavigator
查看>>
swiper 划不动问题
查看>>
Inferno 7.1.12 发布,类 React 的高性能用户界面库
查看>>
MP实战系列(十二)之封装方法详解(续二)
查看>>
mysql必知必会2
查看>>
“想学吗”个人知识管理工具 6.0.5 发布,支持更多平台
查看>>
nginx作为web服务器一个重要的功能就是反向代理
查看>>
ECShop出现Strict Standards: Only variables should be passed by reference in的解决方法
查看>>
一统江湖的大前端(2)—— Mock.js + Node.js 如何与后端潇洒分手
查看>>
不知不觉的就莫名其妙的感觉有一点迷茫了
查看>>
两张图让git新手在项目中运用git命令行
查看>>
zkCli.sh对节点的增删改查
查看>>
初级排序算法1-定义排序规则
查看>>
vs2008打包过程图解
查看>>
彩铅练习,卡通女孩儿
查看>>
简易蓝牙迷你四轴无人机制作教程资料参考
查看>>
编译ITK
查看>>