C语言代码 最长上升子序列的长度和最长上升子序列的长度之和
时间: 2023-11-12 11:04:30 浏览: 174
以下是求解最长上升子序列的长度和最长上升子序列的长度之和的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, j, max, sum = 0;
scanf("%d", &n);
int* a = (int*)malloc(n * sizeof(int));
int* dp = (int*)malloc(n * sizeof(int));
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
dp[i] = 1;
}
for (i = 1; i < n; i++)
{
max = 0;
for (j = 0; j < i; j++)
{
if (a[j] < a[i] && dp[j] > max)
{
max = dp[j];
}
}
dp[i] = max + 1;
}
max = 0;
for (i = 0; i < n; i++)
{
if (dp[i] > max)
{
max = dp[i];
}
sum += dp[i];
}
printf("%d %d\n", max, sum);
free(a);
free(dp);
return 0;
}
```
该代码首先读入序列的长度n和序列a,然后使用动态规划求出最长上升子序列的长度dp和最长上升子序列的长度之和sum,最后输出结果。其中dp[i]表示以a[i]结尾的最长上升子序列的长度,max表示dp数组中的最大值。
阅读全文