题目描述 DFS
递归 + 回溯
样例
// 深搜
#include <iostream>
#include<cstring>
using namespace std;
string n, m="";
int flag[20], res=-1;
int s2i(string str){
int sum=0;
for(int i=0; i<str.size(); i++)
sum = sum*10 + str[i] - '0';
return sum;
}
void dfs(string str){
if( str.size() == n.size() ){
int num = s2i( str );
if( num % 30 == 0 && num > res ) res = num;
return ;
}
for(int i=0; i<n.size(); i++){
string temp = str;
if( flag[i] == 1) continue;
str.push_back( n[i] );
flag[i] = 1;
dfs(str);
flag[i] = 0;
str = temp;
}
}
int main(){
cin >> n;
dfs( m );
cout << res << endl;
return 0;
}