动态规划来做,ans保存子序列,val保存子序列长度
#include<iostream>
#include<cmath>
#include <bits/stdc++.h>
using namespace std;
typedef struct s
{
string ans;
int val = 0;
}state;
bool cmp(state x,state y)
{
if(x.val!=y.val)
{
return x.val > y.val;
}else{
return x.ans < y.ans;
}
}
int main(){
string s;
while(cin>>s)
{
state f[1001][1001];
for(int i = s.length()-1;i>=0;i--)
{
f[i][i].val = 1;
f[i][i].ans = s[i];
for(int j = i+1; j < s.length() ;j++)
{
if(s[i]==s[j])
{
f[i][j].val = f[i+1][j-1].val+2;
f[i][j].ans = s[i]+f[i+1][j-1].ans+s[j];
}else{
if(cmp(f[i+1][j],f[i][j-1]))
{
f[i][j].val = f[i+1][j].val;
f[i][j].ans = f[i+1][j].ans;
}else{
f[i][j].val = f[i][j-1].val;
f[i][j].ans = f[i][j-1].ans;
}
}
}
}
cout<<f[0][s.length()-1].ans<<endl;
}
return 0;
}