int longest=0;
void LongestSubSeq(int* arr, int count, bool* assis, int curindx, int lastnum, int length)
{
if(curindx==count)
{
if(longest<length)
{
longest=length;
for(int i=0;i<count;++i)
if(true==assis[i])
cout<<arr[i]<<" ";
cout<<endl;
}
}
else if(curindx<count)
{
if(arr[curindx]<lastnum)
{
assis[curindx]=true;
LongestSubSeq(arr, count, assis, curindx+1, arr[curindx], length+1);
}
assis[curindx]=false;
LongestSubSeq(arr, count, assis, curindx+1, lastnum,length);
}
}
int LongestSubSeq(int* arr, int count)
{
if(NULL==arr || count==0)
return 0;
if(count<0)
return -1;
bool* assis=new bool[count];
memset(assis,0, sizeof(bool)*count);
LongestSubSeq(arr, count, assis, 0, 0x7fffffff, 0);
delete []assis;
return 0;
}写正确函数需要注意的地方:最长递减子序列
最新推荐文章于 2024-12-23 15:00:00 发布
本文介绍了一种寻找数组中最长递减子序列的递归算法实现。通过递归调用,该算法能够找到所有可能的递减子序列,并记录下最长的一个。代码中详细展示了如何使用辅助数组来标记已选择的元素。

19万+

被折叠的 条评论
为什么被折叠?



