随笔分类 -  DP

摘要:序: 关于最长相同不重叠子串,本文提供的是一个DP做法。 算法时间复杂度O(n^2),空间复杂度O(n)(滚动数组)。 举个例子: string x = “**abcabc**abcabcabc” 最长相同不重叠子串长度为6。 由于要求不重叠,所以边界除首尾外需要增加一条。 即字串长度小于|j-i| 阅读全文
posted @ 2017-04-29 22:34 箜瑟_qi 阅读(234) 评论(0) 推荐(0)
摘要:题意: 逆序对指在一个序列中ai>aj && i < j,也就是一前一后两个数,当大的在前面的时候即算一对。 题目求在一个由1…n组成的序列中逆序对为k的序列的个数。 出题人很良心,不需要写高精度,答案对10000取模即可。 思路: 这道题的前面其实还有一道很类似的题,也是求逆序对。不同的是那道题给 阅读全文
posted @ 2017-04-27 12:34 箜瑟_qi 阅读(188) 评论(0) 推荐(0)
摘要:序: LCIS即求两序列的最长公共不下降子序列。思路于LCS基本一致。 用dp[i][j]记录当前最大值。 代码实现: /* About: LCIS O(mn) Auther: kongse_qi Date:2017/04/26 */ #include <bits/stdc++.h> #define 阅读全文
posted @ 2017-04-26 09:37 箜瑟_qi 阅读(267) 评论(0) 推荐(0)
摘要:序: LIS与LCS分别是求一个序列的最长不下降序列序列与两个序列的最长公共子序列。 朴素法都可以以O(n^2)实现。 LCS借助LIS实现O(nlogn)的复杂度,而LIS则是通过二分搜索将复杂度从n^2中的朴素查找导致的n降至logn使之整体达到O(nlogn)的复杂度。 具体解析: http: 阅读全文
posted @ 2017-04-26 09:00 箜瑟_qi 阅读(307) 评论(0) 推荐(0)
摘要:裸题: 给两串序列,求其中最长的公共子序列的长度。 如: A:1232193 B:482914132 最长公共子序列:232/213/293…总之长度为3。 当然也有一种变式,题意如下。 两条平行线上各有n,m个点,已知每个点的坐标,一个点只能与另一条线上的点连一条线段,两点连成的线段不能相交。问最 阅读全文
posted @ 2017-04-25 17:59 箜瑟_qi 阅读(158) 评论(0) 推荐(0)