求最长公共子序列的长度

 1 #include <cstdio>
 2 #include <iostream>
 3
 4 using namespace std;
 5
 6 const int max_n = 1000 + 2;
 7 const int max_a = 1e6 + 10;
 8
 9 int n;
10 int a[max_n];
11 int dp[max_n];
12
13 void solve()
14 {
15     for(int i=1;i<=n;++i)
16     {
17         dp[i]=1;
18         for(int j=1;j<i;++j)
19         {
20             if(a[j]<a[i])
21             {
22                 dp[i]=max(dp[i],dp[j]+1);
23             }
24         }
25     }
26     printf("%d\n",dp[n]);
27 }
28
29 int main()
30 {
31     scanf("%d",&n);
32     for(int i=1;i<=n;++i)
33     {
34         scanf("%d",&a[i]);
35     }
36     solve();
37     return 0;
38 }
39
40 /*test
41 5
42 4 2 3 1 5
43
44 */

原文地址:https://www.cnblogs.com/jishuren/p/12259571.html

时间: 2024-12-01 19:35:15

求最长公共子序列的长度的相关文章

(hdu step 3.2.2)Common Subsequence(简单dp:求最长公共子序列的长度)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 976 Accepted Submission(s): 538   Probl

codevs 1862 最长公共子序列(求最长公共子序列长度并统计最长公共子序列的个数)

题目描述 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y="y0,y1,-,yk-1"是X的子序列,存在X的一个严格递增下标序列<i0,i1,-,ik-1>,使得对所有的j=0,1,-,k-1,有xij = yj.例如,X="ABCBDAB",Y="BCDB"是X的一个子序

最长公共子序列的长度

最长公共子序列的长度 [试题描述] 给定两个字符串 str1 和 str2 ,如果将 str1 去掉一些字符后得到字符串str,将str2去掉一些字符后也能得到字符串 str ,我们就说 str 是 str1 和 str2 的一个公共子串.当然在得到str的时候不能改变字符的相对顺序.请你编写程序求出字符串 str 长度的最大值. [输入要求] 两行,每行一个只含英文字母的字符串 [输出要求] 一个数,表示两个字符串的最长公共子串的长度 [输入实例] ABCEF BMCGUAFB [输出实例]

[algorithm]求最长公共子序列问题

最直白方法:时间复杂度是O(n3), 空间复杂度是常数 reference:http://blog.csdn.net/monkeyandy/article/details/7957263 /** ** [email protected] ** http://blog.csdn.net/MonkeyAndy **/ 首先介绍动态规划方法的相关知识 动态规划方法的基本思想: 分成若干个子问题,先求解子问题,然后根据子问题的解求得原问题的解.经分解得到的子问题往往不是互相独立的.可重复利用! 其核心思

HDU 1243 反恐训练营 (动态规划求最长公共子序列)

反恐训练营 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3040    Accepted Submission(s): 693 Problem Description 当今国际反恐形势很严峻,特别是美国"9.11事件"以后,国际恐怖势力更是有恃无恐,制造了多起骇人听闻的恐怖事件.基于此,各国都十分担心恐怖势力会对本国社会造

DP 动态规划 Problem B 1002 求最长上升子序列的长度

Problem B  ID:1002 简单题意:给出X和Z两个字符串,求最长上升子序列的长度. 解题思路形成过程:利用矩阵.X字符串中的各字符依次作为行标,Z字符串中的各字符依次作为列标. 从第一行第一列开始逐行遍历:如果当前位置对应的两个字符相同,则在这个位置记录"前一行前一列"的对应的数+1: 如果当前位置对应的两个字符不同,则在这个位置记录"此行前一列"和"此列前一行"对应的两个数的最大值. 遍历结束后,最后一行最后一列获得的数便是最长上升

求最长公共子序列长度

poj 1458  Common Subsequence http://poj.org/problem?id=1458 问题分析: 这个题是求两个序列的最长公共最序列长度,在这里要弄清楚两个问题 1:本题中所有的子序列并没有要求是连续子序列,所以在求最长子序列的时候不连续是允许的 2:哪部分子序列才是最长的 对于给定的 X = < x1, x2, ..., xm > 和 Z = < z1, z2, ..., zk > ,X序列与Z的每一个子序列都含有公共子序列(最小为0),同理,Z

14-高效求最长公共子序列(二维数组存不下)

/*                                   See LCS again时间限制:1000 ms  |  内存限制:65535 KB难度:3 描述 There are A, B two sequences, the number of elements in the sequence is n.m; Each element in the sequence are different and less than 100000. Calculate the length

【算法】 求最长公共子序列

最长公共子序列 算法这玩意儿我完全是外行,因为从头开始就不是这个专业的再加上从小就对逻辑性强的东西苦手..所以一直没什么机会也没什么兴趣学.去年刚开始学习了python的那段时间曾经碰到过几个算法比较高级的问题,当时觉得果然这不是我的能力能驾驭的了的..总之是先记录了下来,但是对于算法这块将来的拓展和进一步学习,其实我挺没信心的 = = 问题:最长公共子序列问题(Longest Common Sequence) 子序列是指一个字符串抽掉0到若干个字符后剩下的字符串,抽取的字符不一定相邻也不一定有