#include <iostream>
using namespace std;
#define N 1000
int max_len = 0;
int max_right_id = 0;
char s[N];
int c[N];
int pre[N];
void print(int id)
{
if(pre[id] == -1)
{
cout<<max_len<<": "<<s[id];
return ;
}
print(pre[id]);
cout<<s[id];
}
void f()
{
strcpy(s, "gfedcba");
int len = strlen(s);
max_len = 1;
max_right_id = 0;
int i, j;
for(i=0; i<len; i++)
{
c[i] = 1;
pre[i] = -1;
}
for(i=1; i<len; i++)
{
for(j=0; j<i; j++)
{
if(s[i]>s[j] && c[i]<c[j]+1)
{
c[i] = c[j] + 1;
pre[i] = j;
}
}
if(max_len<c[i])
{
max_len = c[i];
max_right_id = i;
}
}
print(max_right_id);
cout<<endl;
}
int main(void)
{
f();
return 0;
}
最长递增子序列
最新推荐文章于 2024-08-10 19:35:28 发布