最长子序列

在给定的序列中寻找最长的无重复子序列;

利用map<int,int>object标记每个数字的序号,如果这个数字重复过,那么就能确定他们之间的一个序列长度,然后起点更新到出现的重复的点上,

从这个点开始向后再次找无重复序列,然后每次对比它的长度和上一次确定的序列的长度,如果新序列的长度大于前一个长度就更新它,并且更新终点。

 1 #include<iostream>
 2 #include<map>
 3 using namespace std;
 4 const int N=120;
 5 int array[N];
 6 int starti,endi,start;
 7 int main()
 8 {
 9     int n;
10     while(cin>>n)
11     {
12         map<int,int>my_map;
13         for(int i=1;i<=n;i++)
14         {
15             cin>>array[i];
16         }
17         int l=0,temp;
18         starti=endi=start=1;
19         for(int i=1;i<=n;i++)
20         {
21             if(my_map[array[i]]!=0)
22             {
23                 temp=my_map[array[i]]+1;
24                 if(start<temp)start=temp;//如果起点向前了,就更换新的起点
25             }
26             else if(l<i-start+i)//如果在新的起点到现在点距离大于原来的长度,就更新长度和终点
27             {
28                 l=i-start+1;
29                 endi=i;
30             }
31             my_map[array[i]]=i;
32         }
33         cout<<l<<endl;
34         cout<<"startpoint: "(endi-l)<<" endpoint: "<<endi<<endl;
35     }
36     return 0;
37 }

最长子序列

时间: 2024-12-05 19:00:19

最长子序列的相关文章

nyoj 题目17 单调递增最长子序列

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 复习了利用二分搜索和额外空间解决最长递增子序列问题,最重要的是二分搜索的

单调递增最长子序列(南阳oj17)(经典dp)

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 来源 经典题目 上传者 iphxer #include<std

NYOJ 17 单调递增最长子序列

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 动归,不多说,看代码: #include<stdio.h>

算法实验--最长子序列

一.实验目的: 熟悉掌握动态规划法设计技术 二.实验要求: 1.按教材所授内容要求,完成“最长公共子序列问题”算法.得到一个完整正确的程序. 2.问题规模:不少于100 3.输出最终结果. 三.实验设备: PC机一台 Vc++6.0编译软件一套 四.问题描述: 若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij.例如,序列Z={B,C,D,B}是序列X={A

最长子序列问题 最详细的解题报告

最长子序列之和问题 算法一:暴力法(时间复杂度:O(N^2)) 算法描述:依次求从j到i中最大的和,并将最大的和记录在maxValue中,容易理解但是效率低. 1 static int MaxSum1(int[] arr) { 2 int maxValue = Integer.MIN_VALUE; 3 for (int i = 0; i < arr.length; i++) { 4 int curSum = 0; 5 for (int j = 0; j <= i; j++) { 6 curSu

erlang 小程序:整数序列,搜索和为正的最长子序列

最近学习了一下erlang, 编了个小程序 算法如下: 把参数分为三个 当前位置的前子序列(Save)(比如 -5, 1,2,-1, _, ... ) 前位置为_时, 前子序列就是 1,2,-1 以及此子序列的和(CurSum) ( 1,2,-1的 CurSum 是 2) 剩余的数 Rest:  剩余的数也可以表示为 [H|T] ,H是第一元素,T为剩余的元素是列表 处理过程如下: 如果 Rest 为空,说明处理完毕,打印 CurSum和Save 如果,还剩一个元素(Rest只有一个元素) 如果

【动态规划】单调递增最长子序列

问题 D: [动态规划]单调递增最长子序列 时间限制: 1 Sec  内存限制: 128 MB提交: 36  解决: 25[提交][状态][讨论版] 题目描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 解题思

NYOJ-17-单调递增最长子序列【动态规划】

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 来源 经典题目 上传者 iphxer #include<stdio

HDU 1160 FatMouse&#39;s Speed--dP--(元素1递增元素2递降的最长子序列)

题意:找到体重递增速度递降的最长序列 分析:和最长递增子序列一样,不过这里先做处理:先把体重按递增排序,然后找最长递降子序列即可 代码: #include<iostream> #include<algorithm> #include<cstdio> using namespace std; struct node{ int w,s; int t; }a[2000]; int n,i; struct h{ int x; int pre; }dp[2000]; int an

单调递增连续最长子序列

描述 求一个字符串的最长递增子序列[字母保持原顺序连续]的长度 如:dabdbf最长递增子序列就是abd,长度为3 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增字典序的长度[序列字符保持连续] 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 6 #include<stdio.h> #include<string.h> int main()