最长上升子序列
Posted Hunter丶安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长上升子序列相关的知识,希望对你有一定的参考价值。
合唱队形题
题目分析 :分别求最长上升和下降子序列。
题目分析 :这道题差不多是个水题了,不过我在做题的被误导了,虽然结果正确却超时了。我们用上升子序列的时间复杂度是:O(n*n);
题目收获 :需要对时间复杂和空间复杂度进行深刻的重新理解。
AC代码 :
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define maxn 105
using namespace std;
int d[maxn],b[maxn],num;
int pepo[maxn];
int main()
{
//freopen("in.txt", "r", stdin);
scanf("%d", &num);
memset(d, 0, sizeof(d));
memset(b, 0, sizeof(b));
for (int i = 1; i <= num; i++)
scanf("%d", &pepo[i]);
for (int i = 2; i <= num; i++)
for (int j = 1; j < i; j++)
if (pepo[i] > pepo[j])
d[i] = max(d[i], d[j] + 1);
for (int i = num - 1; i >= 1; i--)
for (int j = num; j > i; j--)
if (pepo[i] > pepo[j])
b[i] = max(b[i], b[j] + 1);
int ans = 0;
for (int i = 1; i <= num; i++)
ans = max(ans, b[i] + d[i]);
printf("%d\n", num - ans - 1);
return 0;
}
以上是关于最长上升子序列的主要内容,如果未能解决你的问题,请参考以下文章