/*
求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列
为{9,5,4,3,2}
*/
#include <iostream>
using namespace std;
int arr[8] = {9, 4, 3, 2, 5, 4, 3, 2};
int dp[8] = {0};
int idx[8] = {0};
void lds(int size)
{
int i, j;
int mlen = 0;
int midx = 0;
dp[0] = 1;
for (i = 1; i < size; ++i){
mlen = 0;
for (j = 0; j < i; ++j){
if (arr[i] < arr[j]){
if (dp[j] + 1 > mlen){
mlen = dp[j] + 1;
midx = j;
}
}
}
dp[i] = mlen;
idx[i] = midx;
}
mlen = 0;
int mi = 0;
for (i = 0; i < size; ++i){
if (dp[i] > mlen){
mlen = dp[i];
mi = i;
}
}
cout<<"原序列:";
for (i = 0; i < size; ++i){
cout<<arr[i]<<" ";
}
cout<<endl;
cout<<"最长递减子序列长度:"<<mlen<<endl;
cout<<"最长递减子序列(逆序):";
while (mlen--){
cout<<arr[mi]<<" ";
mi = idx[mi];
}
cout<<endl;
}
int main()
{
lds(8);
return 0;
}
求一个数组的最长递减子序列
最新推荐文章于 2022-03-26 13:12:25 发布