(DP)51NOD 1006 最长公共子序列&1092 回文字符串
输入
- 第1行:字符串A
- 第2行:字符串B
- (A,B的长度 <= 1000)
输出
- 输出最长的子序列,如果有多个,随意输出1个。
输入样例
- abcicba
- abdkscab
输出样例
- abca
- 解:dp题,画一画表格可以帮助理解。
- #include<stdio.h>
- #include<string.h>
- #define CLR(x) memset(x, 0, sizeof x)
- #define MAX(a,b) (a > b ? a : b)
- char a[], b[],c[];
- int dp[][];
- int main()
- {
- while (scanf_s("%s%s", a,, b,) != EOF)
- {
- int lena = strlen(a),lenb=strlen(b);
- for (int i = ; i <= lena; i++)
- {
- for (int j = ; j <= lenb; j++)
- {
- if (a[i - ] == b[j - ]) dp[i][j] = dp[i - ][j - ] + ;
- else dp[i][j] = MAX(dp[i - ][j], dp[i][j - ]);
- }
- }
- for (int i = dp[lena][lenb],j = ; i > ;)
- {
- if (dp[lena][lenb] > dp[lena - ][lenb]&& dp[lena][lenb] > dp[lena][lenb - ])
- {
- c[i-]=a[lena - ];
- lena--; lenb--;
- i--;
- }
- else
- {
- int mode = dp[lena - ][lenb]>dp[lena][lenb - ] ? :;
- if (mode) lena--;
- else lenb--;
- }
- }
- printf("%s\n",c);
- }
- }
1092
输入
- 输入一个字符串Str,Str的长度 <= 1000。
输出
- 输出最少添加多少个字符可以使之变为回文字串。
输入样例
- abbc
输出样例
- 2
- 解:求最长字符串的变形。针对上一题的做法优化了一下空间复杂度。
- #include<stdio.h>
- #include<string.h>
- #define Max(a,b) ((a)>(b)?(a):(b))
- char a[];
- int dp[][];
- int main()
- {
- while (scanf_s("%s", a, ) != EOF)
- {
- int len = strlen(a), ans, tmp = ;
- memset(dp, , sizeof dp);
- for (int i = ; i < len; ++i)
- {
- for (int j = len - ; j >= ; --j)
- {
- if (a[i] == a[j]) dp[tmp][j] = dp[tmp ^ ][j + ] + ;
- else dp[tmp][j] = Max(dp[tmp ^ ][j], dp[tmp][j + ]);
- }
- tmp ^= ;
- }
- ans = len - dp[tmp ^ ][];
- printf("%d\n", ans);
- }
- return ;
- }
(DP)51NOD 1006 最长公共子序列&1092 回文字符串的更多相关文章
- 51nod 1006 最长公共子序列Lcs 【LCS/打印path】
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...
- 51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最 ...
- 51nod 1006 最长公共子序列Lcs(经典动态规划)
传送门 Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是 ...
- 51Nod - 1006 最长公共子序列Lcs模板
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这 ...
- 51Nod 1006 最长公共子序列Lcs问题 模板题
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个 ...
- 【模板】51nod 1006 最长公共子序列Lcs
[题解] dp转移的时候记录一下,然后倒着推出答案即可. #include<cstdio> #include<cstring> #include<algorithm> ...
- 1006 最长公共子序列Lcs
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdks ...
- 51nod 1092 回文字符串【LCS】
1092 回文字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符 ...
- 51 Nod 1092 回文字符串
1092 回文字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每 ...
随机推荐
- IOS7 开发注意事项
1,修改状态栏的样式和隐藏. 首先,需要在Info.plist配置文件中,增加键:UIViewControllerBasedStatusBarAppearance,并设置为YES: 然后,在UIVie ...
- C开发人员眼中的SICP学习
谈谈自己看SICP的一些体会 第一章 构造过程抽象 这一章事实上和C语言全然等价, 不打算深入学习LISP的能够高速略过. 思想上没有太多新的东西. 这一章最核心的价值就是以下3句话, 理解了这一章 ...
- java设计模式----复合模式
复合模式:复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题 要点: 1.MVC是复合模式,结合了观察者模式.策略模式和组合模式 2.模型使用观察者模式,以便观察者更新,同时保持 ...
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part V
A Tutorial on the Device Tree (Zynq) -- Part V Application-specific data 之前提过,设备树中是一些特殊信息,这样一个驱动可以管理 ...
- ubuntu git ssh不通
xyh@ubuntu-64:~$ ssh -v git@danxinben.com ...
- CentOS笔记-磁盘管理
Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fdisk:用于磁盘分区 df [-ahikHTm] [目录或文件名] -a : ...
- 6.游戏特别离不开脚本(4)-应该避免将集合框架对象传给JS
java map 传给 javascript 不是自动关联的,最好别传啊,遍历起来也麻烦(尽量避开集合框架吧),用数组或者自建一个对象.这里虽然有种方法: // build a Map Map< ...
- FLTK 简介
FLTK,如同其名字所表达的:The Fast Light Tool Kit,一个轻量级的GUI开发库.但这轻量级并不代表功能的羸弱,相反,FLTK在具有基本的GUI功能之外,还拥有一些特 ...
- (31)java web的hibernate使用-一级缓存,二级缓存
参考:https://blog.csdn.net/miachen520/article/details/52195832 hibernate自带一级缓存 和 二级缓存 一,一级缓存: 基于Sessio ...
- js对闭包的理解
原文链接http://www.jb51.net/article/24101.htm,讲的很好,清晰明了.