最长上升子序列求方案C++代码,不能使用指针和stl库,按下标从小到大的顺序输出方案的下标。
时间: 2023-04-07 08:01:11 浏览: 97
好的,我可以回答这个问题。以下是最长上升子序列求方案的 C 代码,按下标从小到大的顺序输出方案的下标:
```
#include <stdio.h>
#define MAX_N 1000
int a[MAX_N], dp[MAX_N], pre[MAX_N];
int n;
int LIS() {
int len = 0;
for (int i = 0; i < n; i++) {
dp[i] = 1;
pre[i] = -1;
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] > dp[len]) {
len = i;
}
}
return len;
}
void printLIS(int len) {
int ans[MAX_N], top = 0;
while (len != -1) {
ans[top++] = len;
len = pre[len];
}
for (int i = top - 1; i >= 0; i--) {
printf("%d ", ans[i]);
}
printf("\n");
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int len = LIS();
printLIS(len);
return 0;
}
```
希望能帮到你!
阅读全文