好题求调
查看原帖
好题求调
158400
晴空一鹤楼主2024/8/9 10:44

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";
}
2024/8/9 10:44
加载中...