最长上升子序列求方案C++代码,不能使用指针和stl库
时间: 2023-04-07 07:01:10 浏览: 114
我可以回答这个问题。以下是一个使用动态规划算法求解最长上升子序列的C代码,不使用指针和STL库:
```
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[n], dp[n], pre[n];
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
dp[i] = 1;
pre[i] = -1;
}
int max_len = 1, max_idx = 0;
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (a[j] < a[i] && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
pre[i] = j;
}
}
if (dp[i] > max_len) {
max_len = dp[i];
max_idx = i;
}
}
printf("最长上升子序列长度为%d\n", max_len);
printf("最长上升子序列为:");
int ans[max_len], idx = max_idx, cnt = 0;
while (idx != -1) {
ans[cnt++] = a[idx];
idx = pre[idx];
}
for (int i = max_len - 1; i >= 0; i--) {
printf("%d ", ans[i]);
}
printf("\n");
return 0;
}
```
这个程序使用了动态规划算法,时间复杂度为O(n^2),可以求出最长上升子序列的长度和方案。
阅读全文