用C语言解决最长单调递增子序列
时间: 2024-01-04 14:04:06 浏览: 88
最长单调递增子序列可以使用动态规划来解决,时间复杂度为O(n^2)。具体步骤如下:
1. 定义一个数组dp,其中dp[i]表示以第i个元素结尾的最长单调递增子序列的长度。
2. 初始化dp数组,将所有元素的dp值都初始化为1。
3. 从第2个元素开始,遍历整个数组,对于每个元素i,遍历其前面的所有元素j(0到i-1),如果j比i小且dp[j]+1大于dp[i],则将dp[i]更新为dp[j]+1。
4. 遍历整个dp数组,找到最大的dp值,并输出其值即可。
下面是C语言代码示例:
```
#include <stdio.h>
int main()
{
int n, nums[1000], dp[1000];
scanf("%d", &n);
for(int i=0; i<n; i++)
scanf("%d", &nums[i]);
for(int i=0; i<n; i++)
{
dp[i] = 1;
for(int j=0; j<i; j++)
{
if(nums[j] < nums[i] && dp[j]+1 > dp[i])
dp[i] = dp[j] + 1;
}
}
int max_len = 0;
for(int i=0; i<n; i++)
if(dp[i] > max_len)
max_len = dp[i];
printf("%d\n", max_len);
return 0;
}
```
阅读全文