用了个很笨的办法才得了10分,想知道最优解
#include<iostream>
using namespace std;
string s[100001];
int max1=0;
bool judge(int a,int con[100001],int num){//判断该下标是否使用过
for(int i=0;i<num;i++){
if(a==con[i])
return 0;
}
return 1;
}
void judge2(string a){//判断owo出现的次数
int cout=0;
for(int i=1;i<a.length()-1;i++){
if(a[i]=='w'){
if(a[i-1]=='o'&&a[i+1]=='o')
cout++;
}
}
if(max1<cout)
max1=cout;
}
void cal(int sum,int x,string a,int *con,int num){
string b;
if(sum==0){
judge2(a);
}
for(int i=1;i<=x;i++){
if(judge(i,con,num)){
con[num]=i;
b=a+s[i];
cal(--sum,x,b,con,++num);
b=s[i]+a;
cal(sum,x,b,con,num);
}
else
continue;
}
}
int main()
{
int n;cin>>n;
int con[100001];//记录下标
for(int i=0;i<n;i++)
cin>>s[i];
for(int i=0;i<n;i++){
cal(i,i,s[0],con,0);
cout<<max1<<endl;
}
}