RT,调了几个小时,WA on #34 ,不知道是不是LCS的问题
#include<bits/stdc++.h>
using namespace std;
int dp[85][85],dpp[85][85][85],noww,tot,ans;
string s,h;
int main(){
cin>>s;
for(int i=0;i<((int)s.size())-1;i++){
memset(dp,0,sizeof(dp));
for(int j=0;j<=i;j++)
for(int k=i+1;k<s.size();k++){
if(j==0||k==i+1)dp[j][k]=(s[j]==s[k]);
else
dp[j][k]=max(dp[j-1][k-1]+(s[j]==s[k]),max(dp[j][k-1],dp[j-1][k]));
}
ans=max(ans,2*dp[i][s.size()-1]);
}
for(int x=0;x<((int)s.size())-2;x++)
for(int y=x+1;y<((int)s.size())-1;y++){
for(int i=0;i<=x;i++)
for(int j=x+1;j<=y;j++)
for(int k=y+1;k<s.size();k++){
if(i==0||j==x+1||k==y+1)dpp[i][j][k]=((s[i]==s[j])&&(s[j]==s[k]));
else
dpp[i][j][k]=max(dpp[i-1][j-1][k-1]+((s[i]==s[j])&&(s[j]==s[k])),max(dpp[i-1][j][k],max(dpp[i][j-1][k],dpp[i][j][k-1])));
}
ans=max(ans,3*dpp[x][y][s.size()-1]);
}
//cout<<ans<<endl;
for(int i=0;i<((int)s.size());i++){
for(int j=1;j<=(1<<16)-1;j++){
int k=j,cnt=i,ooo=i;
h="";
while(k){if((k&1)){h+=s[cnt];ooo=cnt+1;}cnt++;k>>=1;}
//cout<<i<<" "<<j<<endl;
noww=0;
tot=0;
for(int k=0;k<s.size();k++)if(s[k]==h[noww]){noww++;/*cout<<noww<<" "<<h.size()<<endl;*/if(noww==h.size()){tot++;noww=0;}}
if(tot==1)tot--;
tot*=h.size();
//cout<<noww<<" "<<tot<<" "<<h<<endl;
// getchar();
ans=max(ans,tot);
}
}
cout<<ans<<"\n";
}