21xrx.com
2024-12-22 20:07:42 Sunday
登录
文章检索 我的文章 写文章
C++实现最长下降子序列的方法及步骤
2023-07-09 17:02:22 深夜i     --     --
C++ 最长下降子序列 方法 步骤

最长下降子序列(Longest Decreasing Subsequence,LDS)是指在一个序列中,找到一个下降的子序列,并且这个子序列的长度最长。

在C++中实现最长下降子序列可以使用动态规划算法。具体的方法和步骤如下:

1. 定义一个数组dp,dp[i]表示以第i个元素结尾的最长下降子序列的长度。

2. 初始化dp数组,将所有的dp[i]都初始化为1,因为每个元素本身都是一个下降子序列。

3. 遍历数组,对于每个元素i,遍历其前面的所有元素j,如果这个元素比i大,即a[j] > a[i],则可以将dp[i]更新为dp[j] + 1,因为以j结尾的最长下降子序列加上i,可以构成以i结尾的最长下降子序列。

4. 在遍历的过程中,记录最大的dp[i],这就是整个序列的最长下降子序列的长度。

以下是具体的C++代码实现:


#include<bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;

int n, a[N], dp[N], len;

int main()

{

  cin >> n;

  for(int i = 1; i <= n; i++)

    cin >> a[i];

  

  for(int i = 1; i <= n; i++)

  {

    dp[i] = 1;

    for(int j = 1; j < i; j++)

      if(a[j] > a[i])

        dp[i] = max(dp[i], dp[j] + 1);

    len = max(len, dp[i]);

  }

  

  cout << len << endl;

  return 0;

}

输入格式:

第一行是样例个数m。接下来m行,每行第一个数字n表示序列的长度,后面n个数字是序列中的元素。

输出格式:

对于每个样例,输出序列的最长下降子序列的长度。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复