优化全部的时候 WA 和 TLE 了,有两个地方没有优化,过了?
//完全的优化
#include<bits/stdc++.h>
using namespace std;
int t,n;
string s;
map<string ,int> f;
int dfs(string s){
if(f[s]!=0) return f[s]-2;
if(s.find("LOL")!=-1){
f[s]=1;
return -1;
}
if(s.find("L*L")!=-1){
f[s]=3;
return 1;
}
if(s.find("*OL")!=-1){
f[s]=3;
return 1;
}
if(s.find("LO*")!=-1){
f[s]=3;
return 1;
}
if(s.find("*")==-1){
f[s]=2;
return 0;
}
int maxn=-2;
for(int i=0;i<n;++i){
if(s[i]=='*'){
s[i]='L';
maxn=max(maxn,-dfs(s));
if(maxn==1) {
f[s]=3;
return 1;
}
s[i]='O';
maxn=max(maxn,-dfs(s));
if(maxn==1) {
f[s]=3;
return 1;
}
s[i]='*';
}
}
f[s]=maxn+2;
return maxn;
}
int main(){
cin>>t;
while(t--){
cin>>s;
n=s.size();
cout<<dfs(s)<<endl;
}
return 0;
}

//不那么完全的优化
#include<bits/stdc++.h>
using namespace std;
int t,n;
string s;
map<string ,int> f;
int dfs(string s){
if(f[s]!=0) return f[s]-2;
if(s.find("LOL")!=-1){
f[s]=1;
return -1;
}
if(s.find("L*L")!=-1){
f[s]=3;
return 1;
}
if(s.find("*OL")!=-1){
f[s]=3;
return 1;
}
if(s.find("LO*")!=-1){
f[s]=3;
return 1;
}
if(s.find("*")==-1){
f[s]=2;
return 0;
}
int maxn=-2;
for(int i=0;i<n;++i){
if(s[i]=='*'){
s[i]='L';
maxn=max(maxn,-dfs(s));
if(maxn==1) {
//f[s]=3;
return 1;
}
s[i]='O';
maxn=max(maxn,-dfs(s));
if(maxn==1) {
//f[s]=3;
return 1;
}
s[i]='*';
}
}
f[s]=maxn+2;
return maxn;
}
int main(){
cin>>t;
while(t--){
cin>>s;
n=s.size();
cout<<dfs(s)<<endl;
}
return 0;
}
