动态规划-字符串相关
时雨晴天
PhD毕业,正在寻找下一个人生目标,愿求文武双全之道。
展开
-
最长上升子列 LIS 学习小记 Poj 2533 +CF 261D
做dp时遇到的知识点,学习了三种方法:dp,二分,树状数组优化。树状数组优化的在网上貌似很难搜到……这部分参考了学长的博客:http://www.cnblogs.com/jianglangcaijin/archive/2013/01/18/2865811.html三种方法用下来还是个人觉得二分最好用……但树状数组貌似最有前途……Poj 2533#include int原创 2013-04-15 23:13:14 · 962 阅读 · 0 评论 -
第九届北航程序设计大赛网络预赛——水题题解
比赛链接:http://acm.buaa.edu.cn/contest/117/home/噩梦般的期末七连考刚刚过半,按现在的进度估计我cet6是要果考了,求过。。。。本次比赛是复习期间断断续续做的,弱菜我冥思苦想只搞出6题,实在太弱……比赛结束后雷神告诉了我另外几道的思路,考完之后希望能有时间挑战下。A BUAA 759 晴天小猪是点赞狂魔题目链接:http://acm.buaa原创 2013-12-03 22:44:04 · 1225 阅读 · 0 评论 -
LightOJ 1013 Love Calculator (LCS+DP)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1013题意:给出两个字符串,求一个字符串,使得另两个字符串为该串的子序列(也就是说不必每个字母都相邻),求该串的最小长度,并求出在最小长度的情况下,该串可以有多少种不同的构成。思路:LCS变形,最小长度=两串长度之和-两串的LCS的长度。接下来用DP求有多少种不同的构成。dp原创 2013-11-08 21:36:03 · 1443 阅读 · 0 评论 -
LIS 模板 (最长上升/下降子序列) STL实现
群里分享的模板,O(nlogn),真心精简……最近接触了函数 count_if 也一起记录进去了。修改自:http://paste.ubuntu.com/6230037/#include#include#include#include#includeusing namespace std;const int N = 131072;int n = 7, a[N]原创 2013-10-13 21:18:27 · 1595 阅读 · 0 评论 -
UVA 10635 Prince and Princess (LCS优化转LIS)
题意:求两个串的最长公共子序列 LCS。思路:数据量比较大,O(n^2)的dp不够快。但每组数据中的数各不相同,可以利用这一点转化成求最大上升子序列 LIS就样例来说 A{1 7 5 4 8 3 9}, B{1 4 3 5 6 2 8 9},按照A的顺序进行映射:A{1,2,3,4,5,6,7} B{1,4,6,3,0,0,5,7} 于是问题转化为求B的LIS,可以在O(nlogn)原创 2013-08-21 12:19:45 · 1176 阅读 · 0 评论 -
Lightoj 1085 All Possible Increasing Subsequences (树状数组+DP)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1085题意:找出一个序列中的所有上升序列。思路:离散化后,树状数组优化的DP。dp[i]表示以a[i]为序列最后一个数字的上升序列的个数,状态转移方程见注释。很久前写的,都快忘了这题是怎么回事了……#include #include #include #includ原创 2013-07-18 10:46:43 · 1186 阅读 · 0 评论 -
LightOJ 1277 Looking for a Subsequence (LIS)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1277题意:给出一个长度为n的数列。输出数列一个长度恰好为m的下标字典序最小的(即最靠左的)上升子列。思路:从右向左求一次最长递减子列,记录每个位置的dp值,即以该数结尾最长的下降子列的长度。对于给定的m,先从左向右找到一个dp[i]>=m的位置,那么这个数肯定是答案原创 2013-05-15 21:34:29 · 812 阅读 · 0 评论 -
最长公共上升子序列(LCIS)学习小记 Hdu 1423 + Poj 2127 (LCIS路径输出)
LCS和LIS的结合,时间复杂度O(m*n),如果不要求路径输出 (如 Hdu 1426) 则空间复杂度O(n),若要求路径输出 (如 Poj 2127) 则空间复杂度O(n^2) 。学习的时候最早读的是《动态规划中的提纯》,果断没看懂。。。。参考了以下两篇博文后终于理解了算法的思想。Hdu 1423 动态规划—最长公共上升子序列 - 诺小J - 博客园http://ww原创 2013-04-19 20:58:42 · 1748 阅读 · 0 评论 -
Hdu 1513 & Poj 1159 (LCS) + Hdu 1025 (LIS)
LCS和LIS的水题,LCS那道用了滚动数组,貌似不用滚动数组会超内存Hdu 1513 & Poj 1159 /*设原序列S的逆序列为S', 则最少需要补充的字母数 = 原序列S的长度 - S和S'的最长公共子串长度*/#include #include #define max(x,y) ((x)>(y)?(x):(y))int dp[2][5005];char原创 2013-04-19 22:01:22 · 1321 阅读 · 0 评论 -
Hdu 4512 吉哥系列故事——完美队形I (LCIS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4512思路:数据正反各存一次,求两次的最长公共上升子序列,因为要解决对称的问题,所以比LCIS的通常算法稍有不同。上个月做腾讯编程马拉松时遇到的题,当时完全没想法 (虽然这次做也调试了好久。。。详见代码),讨论群里有说是合唱队形的,有说是回文串的,于是那时就决定要学一下这部分的知识了。#in原创 2013-04-19 21:10:31 · 1094 阅读 · 0 评论 -
Hdu 1160 FatMouse's Speed (LIS路径输出)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160题意:给出n个老鼠的重量和速度值(先重量后速度),要求给出一个最长的排列,其中,前一只老鼠的重量严格小于后一只老鼠,而它的速度要严格大于后一只老鼠。排列可能有多种,只要求出一种就可以了。思路:排序后转化为最长上升子列。忽略了可能有多种正确排列,白白调试好久……#include #原创 2013-04-17 20:49:04 · 777 阅读 · 0 评论 -
最长公共子序列 (LCS) 学习小记 Hdu 1159 + Poj 2250 (LCS路径打印)
其实这东西刚进实验室的时候就学过,当时还不知道dp是啥……记得当时滚动数组优化看了一晚上没学会。。。现在看来就是一个很基础的dp……最长公共子序列(LCS) | 勇幸|Thinkinghttp://www.ahathinking.com/archives/115.htmlHdu 1159#include #include #define max(x,原创 2013-04-17 21:55:09 · 906 阅读 · 0 评论 -
NOIP 合唱队形 (LIS应用)
之前群聊时接触的知识点,正好昨天学了LIS,拿出来练一练,加深下理解。注:LIS的二分算法结束后记录的并不是一个符合题意的最长上升子序列!题目链接://http://www.rqnoj.cn/Problem_26.html思路:正反两遍LIS之后相加。#include int data[105];int dps[105],dpx[105];int main (){ i原创 2013-04-16 22:40:24 · 1061 阅读 · 0 评论 -
Codeforces Good Bye 2013 ABCDE
继续总结做过的练习赛。链接:http://codeforces.com/contest/379A New Year Candles题意:初始有a根蜡烛,每根蜡烛照明1小时,每b根蜡烛的残骸可以变成一根新蜡烛,问一共可以照明多久#include int main (){ int sum=0,a,b; scanf("%d%d",&a,&b); sum+=a原创 2014-02-05 16:28:15 · 913 阅读 · 0 评论