给出长度为n的数组找出这个数组的最长递增子序列用c语言
时间: 2023-10-12 07:17:21 浏览: 125
c语言编程题之数组操作最长连续递增序列.zip
下面是使用动态规划算法求解最长递增子序列的C语言代码:
```c
#include <stdio.h>
int main() {
int n, i, j, max_len = 1;
scanf("%d", &n);
int arr[n], dp[n];
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
dp[i] = 1; // 初始化dp数组为1
}
for (i = 1; i < n; i++) {
for (j = 0; j < i; j++) {
if (arr[i] > arr[j] && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1; // 更新dp数组
if (dp[i] > max_len) {
max_len = dp[i]; // 更新最长递增子序列的长度
}
}
}
}
printf("%d\n", max_len);
return 0;
}
```
其中,数组`arr`存储输入的数组,数组`dp`存储以`arr[i]`结尾的最长递增子序列的长度。`dp[i]`的值等于`dp[j] + 1`(其中`j < i`且`arr[j] < arr[i]`),表示将`arr[i]`加入以`arr[j]`结尾的最长递增子序列后得到的新的最长递增子序列的长度。最终,遍历`dp`数组,找到最大值就是最长递增子序列的长度。
阅读全文