#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
#define LENGTH 10
//找出所有位子的最长子序列的长度,并记录回溯点
void findMax(int *arr, int *str, int *ret,int length)
{
for(int i = 0; i < length; i++)//初始化时最长子序列为一,回溯矩阵为-1
{
str[i] = 1;
ret[i] = -1;
int temp = 1; //暂时存放最大的子序列长度的变量
for(int j = 0; j < i; j++)//根据最优递归关系,基于最优子解来求得i的最长子序列
{
if(arr[j] <= arr[i] && (str[j] + 1) >= temp) //递归条件是
{
temp = str[j] + 1; //重新修改最大子序列的长度
ret[i] = j; //记录上一个回溯点
}
}
str[i] = temp;
}
}
void trackBack(int *arr, int *str, int *ret,int length)//回溯输出结果
{
int get[LENGTH]; //保存最大子序列
int j = 0; //记录最大子序列的下标
int k = 0; //回溯下标暂时保存变量
int max = 0; //暂时保存拥有最长子序列的位置
for(int i = 0; i < length; i++) //遍历数组s[]找出位
求最长子序列
最新推荐文章于 2022-07-08 23:12:46 发布
这是一个关于找出数组中最长递增子序列的程序。通过动态规划计算每个位置的最长子序列长度并记录回溯点,然后使用回溯算法打印出最长递增子序列。程序接受用户输入数组长度,并读取数组元素,最后输出最长递增子序列。
摘要由CSDN通过智能技术生成