我用 dfs TLE了一个点,有没有dalao告诉我怎么优化。
#include<bits/stdc++.h>
using namespace std;
long long n,r;
char a[10100],b[10100];
bool flag[10100];
void dfs(int x,char y,int sum1,int sum2){
if(x>r){
if(sum1>=1&&sum2>=2){
for(int i=1;i<=r;i++)
cout<<b[i];
cout<<endl;
}
return;
}
for(int i=1;i<=n;i++){
if(!flag[i]&&a[i]>y){
b[x]=a[i];
flag[i]=1;
if(a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u')
dfs(x+1,a[i],sum1+1,sum2);
else
dfs(x+1,a[i],sum1,sum2+1);
flag[i]=0;
}
}
}
int main() {
cin>>r>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
dfs(1,' ',0,0);
return 0;
}