HDU 1503 Advanced Fruits
求最短公共祖先,是最长公共子序列的变形。
在DP的同时记录下路径,然后递归回去输出即可。
如果碰到公共的,只输出一次。
以第一个样例为例:
图中数字是最大公共子段的长度,下标代表路径。
带下划线的是递归时所走的路径。
1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 char s1[205], s2[205]; 8 int path[205][205], dp[205][205]; 9 10 void Print(int i, int j) 11 { 12 if(i == 0 && j == 0) return; 13 if(i == 0 && j != 0) 14 { 15 Print(i, j-1); 16 printf("%c", s2[j-1]); 17 } 18 else if(i != 0 && j == 0) 19 { 20 Print(i-1, j); 21 printf("%c", s1[i-1]); 22 } 23 else if(path[i][j] == 0) 24 { 25 Print(i-1, j-1); 26 printf("%c", s1[i-1]); 27 } 28 else if(path[i][j] == 1) 29 { 30 Print(i-1, j); 31 printf("%c", s1[i-1]); 32 } 33 else 34 { 35 Print(i, j-1); 36 printf("%c", s2[j-1]); 37 } 38 } 39 40 int main(void) 41 { 42 #ifdef LOCAL 43 freopen("1503in.txt", "r", stdin); 44 #endif 45 46 while(cin >> s1 >> s2) 47 { 48 int len1, len2; 49 len1 = strlen(s1); 50 len2 = strlen(s2); 51 int i, j; 52 for(i = 1; i <= len1; ++i) 53 for(j = 1; j <= len2; ++j) 54 { 55 if(s1[i-1] == s2[j-1]) 56 { 57 dp[i][j] = dp[i-1][j-1] + 1; 58 path[i][j] = 0; 59 } 60 else if(dp[i-1][j] > dp[i][j-1]) 61 {//从上边来 62 dp[i][j] = dp[i-1][j]; 63 path[i][j] = 1; 64 } 65 else 66 {//从左边来 67 dp[i][j] = dp[i][j-1]; 68 path[i][j] = 2; 69 } 70 } 71 72 Print(len1, len2); 73 printf("\n"); 74 } 75 return 0; 76 }
代码君
转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/3880593.html
HDU 1503 Advanced Fruits相关推荐
- hdu 1503 Advanced Fruits(DP)
题意: 将两个英文单词进行合并.[最长公共子串只要保留一份] 输出合并后的英文单词. 思路: 求最长公共子串. 记录路径: mark[i][j]=-1:从mark[i-1][j]转移而来. mark[ ...
- 动态规划总结与题目分类
源博客链接:http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少 ...
- 『ACM-算法-动态规划』初识DP动态规划算法
一.多阶段决策过程的最优化问题 在现实生活中,有类活 动的过程,由于 它的特殊性,可将过程分成若干个互相阶段.在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.当阶段决策的选取不是任意确 ...
- (转)dp动态规划分类详解
dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...
- 《动态规划》— 动态规划分类
动态规划(英语:Dynamic programming,DP)是一种在数学.计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. 动态规划常常适用于有重叠子问题和最 ...
- 转:动态规划题目分类
https://blog.csdn.net/cc_again/article/details/25866971 一.简单基础dp 这类dp主要是一些状态比较容易表示,转移方程比较好想,问题比较基本常见 ...
- 【DP专辑】ACM动态规划总结
转载请注明出处,谢谢. http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日 ...
- ACM 动态规划(简称dp) 分类
转载自: http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日 动态规划博客地 ...
- HDU OJ 动态规划46题解析
Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢 ...
- HDU中一些DP的题目分类
DP是难点,供自已以后系统学习. 1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做 ...
最新文章
- 机器学习(三)--- scala学习笔记
- 【青少年编程】【三级】换装
- php substr 去掉前n位_用PHP是如何做图片防盗链的
- 标签传播算法_复杂网络社区发现算法汇总
- BZOJ3670 [Noi2014]动物园 【KMP计数】
- PHP内存管理 垃圾回收
- 配置Git服務器和Windows客戶端
- 【重学JS系列】slice用法大合集
- 矩池云上如何修改cuda版本
- 且看嘉兴如何“化云为雨”
- 大力发展职业技术教育,高等教育也要跟动车高铁一样降降速了
- centos查看CPU温度
- tokenize java,Java split string - Java tokenize string examples - 入门小站-rumenz.com
- 医生还未失业,IBM Watson 已跌入深渊
- 电影人生 - 一个人的电影
- Linux内存管理(三十五):内存规整简介和 kcompactd详解
- 2022美国大学生数学建模竞赛报名通知
- 2021UpdateC#.NET笔试题高级进阶篇
- 聊聊​WebRTC之音频会话管理
- PPT封面反转镂空文字