1259:【例9.3】求最长不下降序列 2021-01-15

简介: 1259:【例9.3】求最长不下降序列 2021-01-15

1259:【例9.3】求最长不下降序列

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

设有由n(1≤n≤200)个不相同的整数组成的数列,记为:b(1)、b(2)、……、b(n)若存在i1<i2<i3<…<ie 且有b(i1)≤b(i2)≤…≤b(ie)则称为长度为e的不下降序列。程序要求,当原数列出之后,求出最长的不下降序列。

例如13,7,9,16,38,24,37,18,44,19,21,22,63,15。例中13,16,18,19,21,22,63就是一个长度为7的不下降序列,同时也有7 ,9,16,18,19,21,22,63组成的长度为8的不下降序列。

【输入】

第一行为n,第二行为用空格隔开的n个整数。

【输出】

第一行为输出最大个数max(形式见样例);

第二行为max个整数形成的不下降序列,答案可能不唯一,输出一种就可以了,本题进行特殊评测。

【输入样例】

14

13 7 9 16 38 24 37 18 44 19 21 22 63 15

【输出样例】

max=8

7 9 16 18 19 21 22 63

1. #include <stdlib.h>
2. #include <cstdio>
3. #include <algorithm>
4. #include <iostream>
5. using namespace std;
6. const int M=205;
7. int a[M][4],n,maxn=0,t;
8. int main()
9. {
10.   scanf("%d",&n);
11.   for(int i=1;i<=n;i++){
12.     scanf("%d",&a[i][1]);//原数
13.     a[i][2]=1;//存储最大长度
14.     a[i][3]=0;//记录路径 上一个位置
15.   }
16.   for(int i=n-1;i>=1;i--){
17.     int l=0,p=0;
18.     for(int j=i+1;j<=n;j++)
19.       if(a[i][1]<=a[j][1]&&a[j][2]>l){
20.         l=a[j][2];p=j;
21.       }
22.     if(l>0){
23.       a[i][2]+=l;a[i][3]=p;
24.     }
25.   }
26.   for(int i=1;i<=n;i++){
27.     if(a[i][2]>maxn){
28.       maxn=a[i][2];
29.       t=i;
30.     }
31.   }
32.   printf("max=%d\n",maxn);
33.   while(t!=0){
34.     printf("%d ",a[t][1]);
35.     t=a[t][3];
36.   }
37.   return 0;
38. }

 

相关文章
|
7月前
|
算法
KPM算法求字符串的最小周期证明
公式 `ans = n - LPS[n-1]` 描述了最小周期,其中 `n` 是子串长度,`LPS[n-1]` 是前缀函数值。证明分为特殊情况和一般情况:对于完整周期字符串,`LPS[n-1] = 3*T`,故 `ans = T`;对于非完整周期,通过分析不同长度的 `[末部分]` 和 `[前部分]`,展示 `ans` 始终等于周期 `T` 或由 `[e][b]` 构成的最小周期,从而证明公式正确。
|
7月前
最长连续不重复子序列
最长连续不重复子序列
33 1
|
7月前
leetcode-1438:绝对差不超过限制的最长连续子数组
leetcode-1438:绝对差不超过限制的最长连续子数组
46 0
|
7月前
|
C++
最长特殊序列 Ⅰ(C++)
最长特殊序列 Ⅰ(C++)
29 0
|
7月前
|
算法
leetcode-128:最长连续序列
leetcode-128:最长连续序列
48 0
|
7月前
|
存储 机器学习/深度学习 C语言
Day3 字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
Day3 字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
61 0
m 序列(最长线性反馈移位寄存器序列)详解
m 序列(最长线性反馈移位寄存器序列)详解
542 0
线性DP:最长上升(下降)子序列
线性DP:最长上升(下降)子序列
45 0
Leecode1124表现良好的最长时间段
Leecode1124表现良好的最长时间段
44 0
|
算法 C++ Python
【每日算法Day 90】5种方法:求解数组中出现次数超过一半的那个数
【每日算法Day 90】5种方法:求解数组中出现次数超过一半的那个数
177 0