帮我用c++写一份求最长不下降子序列长度和数列的代码
时间: 2023-05-24 11:04:21 浏览: 57
以下是使用动态规划算法实现的最长不下降子序列代码:
```c
#include <stdio.h>
int main() {
int n, i, j, maxLength = 0;
scanf("%d", &n);
int a[n], dp[n];
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
dp[i] = 1; // 初始化子序列长度为1
}
for (i = 1; i < n; i++) {
for (j = 0; j < i; j++) {
if (a[j] <= a[i]) {
dp[i] = dp[i] > dp[j] + 1 ? dp[i] : dp[j] + 1;
}
}
maxLength = maxLength > dp[i] ? maxLength : dp[i]; // 记录最长子序列长度
}
printf("%d\n", maxLength); // 输出最长子序列长度
// 输出最长子序列
for (i = n - 1; i >= 0; i--) {
if (dp[i] == maxLength) {
printf("%d ", a[i]);
maxLength--;
}
}
return 0;
}
```
输入格式:
第一行输入一个整数 n 表示数列的长度。
接下来的一行输入 n 个整数,表示数列的每个元素。
输出格式:
第一行输出最长不下降子序列的长度。
接下来一行输出最长不下降子序列的数列。