
动态规划——LCS、LIS、最大子区间和
文章平均质量分 72
dumeichen
这个作者很懒,什么都没留下…
展开
-
poj 2533/3903 Longest Ordered Subsequence(最长升序子串)
题意:最长升序子串思路:采用原创 2014-07-08 19:27:59 · 457 阅读 · 0 评论 -
poj 1836 lis(保证每个人都能看到两边中的一边)
题意:给定一个序列,求最少士兵出列后,使得新队列任意一个士兵都能看到左边或者右边的无穷远处。即左半部分递增,到一个地方后变成递减。思路:可以从左往右和从右往左做两遍lis,分别记录在dp1和dp2中。此时需要注意,如果从左往右扫一遍,求max(dp1[i]+dp2[i])就错了。可以考虑如下数据:83 4 5 1 2 5 4 3从这组数据可知,应该是枚举两个中点,当然这并不需要n原创 2015-11-25 00:00:26 · 347 阅读 · 0 评论 -
poj 1952 最长递减子序列+求个数
题意:给出N个数的序列,求最长递减子序列,并且求出不同的序列方案个数。解释:如 4 3 2 4 3 2这个序列,最长递减子序列长度显然为3,但是个数只计算一次,因为前后两个都是4 3 2,看做是相同的。思路:计数搞不定,看的别人题解。num[i]表示前i个数的序列中,达到最长递减(以s[i]为最后一位)的而且该序列方案中前一个数在s[j]之后的方案个数。其中s[j]为最靠右的=s[i]的数原创 2015-10-02 16:33:08 · 705 阅读 · 0 评论 -
poj 2127 dp(最长公共递增子序列)
题意:给定两个不长于500的字符串,求这两个串的最长公共递增子序列。思路:首先是一个n^3的算法。dp[i][j]表示考虑s[1...i]和t[1...j],且以t[j]为结尾的最优值,那么状态转移方程为:1、若s[i]==t[j] , dp[i][j] = max(dp[i-1][k])+1 , 12、若s[i]!=t[j] , dp[i][j] = dp[i-1][j];对于这原创 2015-09-03 18:46:52 · 447 阅读 · 0 评论 -
poj 1609 dp(堆积木能达到的最高层)
题意:给出一列数对 ,求出其最长的不减序列的长度。思路:最简单的思路是采用lis,dp实现,nlogn的复杂度(注意不减和递增的区别,二分查找的条件要进行改变)。网上看到针对此题的另一种思路,直接对数据进行dp:此题的数据范围为1~100,对数据dp的复杂度为O(100*100)。lis的代码:#include #include #include #define max(a,b)原创 2015-01-28 21:29:33 · 877 阅读 · 0 评论 -
poj 2264 LCS(同时包含两个串的最短父串)
题意:给定两个字符串a和b,求一个串包含a串和原创 2014-11-05 19:40:11 · 769 阅读 · 0 评论 -
poj 1159 最长公共子串LCS
题意:给定一个子串,问最少添加多少个字符能够使得此串变为回文串思路:求yuan原创 2014-07-10 17:02:06 · 477 阅读 · 0 评论 -
poj 1050 最大子矩阵和
题意:给定一个矩阵,求最大子矩阵元素和。思路:原创 2014-07-07 16:49:26 · 449 阅读 · 0 评论 -
poj 1458 最长公共子序列
题意:求两个字符串的最长公共子串原创 2014-07-13 21:04:06 · 491 阅读 · 0 评论 -
poj 2250/3356 LCS(文章LCS/AGTC)
题意:给定两篇文章,以词为单位做LCS。思路:dp,需要输出LCS方案,我用的递归输出,打表当然也可以。#include #include #include #include using namespace std;#define N 105int dp[N][N];int lena,lenb;char s[N][35],t[N][35];void print(int x原创 2015-03-17 23:34:47 · 407 阅读 · 0 评论